
"Beberapa lagi pelajaran yang menarik. Oh, saya suka mengajar!"
"Saya ingin memberitahu anda tentang cara berbilang blok tangkapan berfungsi. Ia sangat mudah: apabila pengecualian berlaku dalam blok percubaan , pelaksanaan beralih ke blok tangkapan pertama ."
"Jika jenis yang ditunjukkan dalam kurungan blok tangkapan sepadan dengan jenis pengecualian yang dilemparkan, maka pelaksanaan bermula di dalam blok itu. Jika tidak, kita beralih ke blok tangkapan seterusnya , di mana semakan yang sama dilakukan."
"Jika kami kehabisan blok tangkapan dan pengecualian belum ditangkap, ia akan dibaling semula, dan kaedah semasa akan ditamatkan secara tidak normal."
"Saya faham. Blok tangkapan yang bertepatan dengan jenis pengecualian akan menjadi yang dilaksanakan."
"Ya, betul. Namun, pada hakikatnya ia agak rumit. Kelas boleh mewarisi kelas lain. Jika kelas Lembu mewarisi kelas Haiwan, objek Lembu mungkin dirujuk bukan sahaja oleh pembolehubah Lembu, tetapi juga oleh pembolehubah Haiwan. "
"Dan?"
"Oleh kerana semua pengecualian mewarisi Exception atau RuntimeException (yang turut mewarisi Exception ), ia masih boleh ditangkap menggunakan 'catch ( Exception e)' atau ' catch (RuntimeException e) '."
"Dan?"
"Kami boleh membuat dua kesimpulan. Pertama, anda boleh menggunakan 'tangkapan (Pengecualian e)' untuk menangkap sebarang pengecualian. Kedua, susunan blok tangkapan penting. "
"Berikut adalah beberapa contoh:"
" ArithmeticException
Yang berlaku selepas kita bahagi dengan 0 akan ditangkap dalam blok tangkapan kedua."
try
{
System.out.println("Before calling method1.");
int a = 1 / 0;
System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
System.out.println("Any other errors. Exception has been caught.");
}
"Dalam contoh di bawah, yang ArithmeticException
akan ditangkap dalam blok tangkapan pertama, kerana semua pengecualian mewarisi Pengecualian, iaitu Exception
meliputi semua pengecualian. "
try
{
System.out.println("Before calling method1.");
int a = 1/0;
System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
System.out.println("Divided by zero. Exception has been caught.");
}
"Dalam contoh di bawah, ArithmeticException
tidak akan ditangkap. Ia akan dikembalikan kepada kaedah panggilan."
try
{
System.out.println("Before calling method1.");
int a = 1/0;
System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
System.out.println("Null reference. Exception has been caught.");
}
"Itu menjelaskan sedikit perkara. Pengecualian ini bukanlah topik yang paling mudah."
"Nampaknya begitu sahaja. Mereka sebenarnya adalah salah satu perkara paling mudah di Jawa."
"Saya tidak tahu sama ada mahu gembira atau sedih tentang perkara itu…"
GO TO FULL VERSION