參考資料:《Java程序設(shè)計(jì)經(jīng)典課堂》(清華大學(xué)出版社)
通過程序代碼來說明同時出現(xiàn)父類和子類異常的捕獲的順序問題蛀恩。
public class ExceptionErrorDemo {
public static void main(String[] args) {
int[] numbers = new int[3];
try {
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 7;
numbers[3] = numbers[2] / 0;//會拋出算術(shù)運(yùn)算異常;
} catch (Exception e) {
System.out.println(e.toString());
} catch (ArithmeticException e) {
e.toString();
}
}
}
/*
ExceptionErrorDemo.java:11: 錯誤: 已捕獲到異常錯誤ArithmeticException
} catch (ArithmeticException e) {
^
1 個錯誤
*/
我們知道领迈,Java中異常類之間也存在繼承關(guān)系算吩。在這里拓萌,Exception類是ArithmeticException類的父類岁钓,父類可以捕獲它的子類能捕獲的所有異常。如果該父類捕獲異常的代碼出現(xiàn)在子類捕獲異常的代碼之前微王,則父類都會先捕獲這些異常屡限,導(dǎo)致后面所有子類捕獲異常的代碼永遠(yuǎn)得不到執(zhí)行,從而出現(xiàn)編譯錯誤炕倘,將父類放在最后即可解決這個問題钧大。
public class ExceptionErrorDemo {
public static void main(String[] args) {
int[] numbers = new int[3];
try {
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 7;
numbers[3] = numbers[2] / 0;//會拋出算術(shù)運(yùn)算異常;
} catch (ArithmeticException e) {
System.out.println("已經(jīng)捕獲");
e.toString();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
//執(zhí)行結(jié)果;
/*
已經(jīng)捕獲
*/