參考資料:《Java程序設(shè)計(jì)經(jīng)典課堂》(清華大學(xué)出版社)
通過(guò)程序代碼來(lái)說(shuō)明同時(shí)出現(xiàn)父類和子類異常的捕獲的順序問(wè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;//會(huì)拋出算術(shù)運(yùn)算異常;
} catch (Exception e) {
System.out.println(e.toString());
} catch (ArithmeticException e) {
e.toString();
}
}
}
/*
ExceptionErrorDemo.java:11: 錯(cuò)誤: 已捕獲到異常錯(cuò)誤ArithmeticException
} catch (ArithmeticException e) {
^
1 個(gè)錯(cuò)誤
*/
我們知道,Java中異常類之間也存在繼承關(guān)系。在這里,Exception類是ArithmeticException類的父類,父類可以捕獲它的子類能捕獲的所有異常。如果該父類捕獲異常的代碼出現(xiàn)在子類捕獲異常的代碼之前,則父類都會(huì)先捕獲這些異常,導(dǎo)致后面所有子類捕獲異常的代碼永遠(yuǎn)得不到執(zhí)行,從而出現(xiàn)編譯錯(cuò)誤,將父類放在最后即可解決這個(gè)問(wè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;//會(huì)拋出算術(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)捕獲
*/