"Saya ingin memberitahu anda sedikit tentang cara pengecualian berfungsi. Contoh di bawah harus memberi anda gambaran kasar tentang perkara yang berlaku:"
class ExceptionExampleOriginal
{
public static void main(String[] args)
{
System.out.println("main begin");
try
{
System.out.println("main before call");
method1();
System.out.println("main after call");
}
catch (RuntimeException e)
{
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
throw new RuntimeException(s);
}
}
public class ExceptionExample
{
private static Exception exception = null;
public static void main(String[] args)
{
System.out.println("main begin");
System.out.println("main before call");
method1();
if (exception == null)
{
System.out.println("main after call");
}
else if (exception instanceof RuntimeException)
{
RuntimeException e = (RuntimeException) exception;
exception = null;
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
if (exception != null) return;
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
exception = new RuntimeException(s);
return;
}
}
"Saya benar-benar sesat."
"Baiklah. Biar saya terangkan apa yang berlaku."
"Dalam contoh di sebelah kiri, kami memanggil beberapa kaedah berturut-turut. Dalam method2
, kami sengaja mencipta dan membuang pengecualian (kami mencipta ralat)."
"Contoh di sebelah kanan menunjukkan apa yang sedang berlaku."
"Lihat method2
. Daripada mencipta pengecualian, kami mencipta RuntimeException
objek, menyimpannya ke pembolehubah statik exception
, dan kemudian segera keluar daripada kaedah menggunakan return
pernyataan."
"Dalam method1
, selepas memanggil method2
, kami menyemak sama ada terdapat pengecualian. Jika terdapat pengecualian, kemudian method1
tamat sekali gus. Semakan seperti ini dilakukan secara tidak langsung selepas setiap panggilan kaedah (!) di Jawa."
"Wah!"
"Wah betul."
"Dalam lajur kanan, saya telah menggunakan kaedah utama untuk menunjukkan kira-kira apa yang berlaku apabila pengecualian ditangkap menggunakan binaan cuba-tangkap. Jika tiada pengecualian, maka semuanya terus berjalan seperti yang dijangkakan. Jika terdapat pengecualian dan ia adalah jenis yang sama yang dinyatakan dalam pernyataan tangkapan, kemudian kami mengendalikannya."
"Apa maksud throw
dan instanceof
maksudnya? "
"Lihat baris terakhir: throw new RuntimeException(s);
. Beginilah cara anda mencipta dan membuang pengecualian. Kami tidak akan mengusahakannya lagi. Ia hanyalah satu contoh."
"Kami gunakan a instanceof B
untuk menyemak sama ada objek a
adalah jenis B
, iaitu sama ada objek yang dirujuk oleh pengecualian pembolehubah ialah RuntimeException. Ini ialah ungkapan boolean."
"Saya rasa saya dah dapat. Hampir."
GO TO FULL VERSION