Java基礎:異常捕獲順序

 轉載於:https://blog.csdn.net/jiyiqinlovexx/article/details/46597899

public voidtestException(){
int a[] = {1,2,3};int q = 0;
try{
for(int i=0;i<a.length;i++){a[i] /= q;}
}catch(ArithmeticException h){
System.out.print("ArithmeticException\n");        //執行
}catch(Exception e){
System.out.print("Exception\n");        //不會執行,且必須放在ArithmeticException後面
/**
 * 範圍更大的Exception不但必須放在後面
 * 而且放在後面還不會被執行(被前面的範圍更小的
 * 異常攔截了),那這樣還有什意義呢???
 */
}finally{System.out.print("finally\n");}
}
//<span style="color:#3333ff;">output</span>
ArithmeticException
finally

 *        要點1:雖然ArithmeticException繼承自Exception,但是當發生ArithmeticException異常
 *                        並捕獲的時候,就只會捕獲實際發生的這個異常,並不會因爲Exception是其父類而

 *                        執行Exception那個catch子句。

 *        要點2:但是如果你嘗試將範圍更大的Exception的catch語句放到的catch語句的前面,那麼就會發生

 *                        catch子句不可到達的錯誤“Unreachablecatch block for ArithmeticException.

 *                        Itis already handled by the catch block for Exception”

 *                        即範圍更大的異常(父類)必須放在後面,如果沒有繼承關係,比如ClassNotFoundException,

 *                        和ArithmeticException的catch子句之間就無所謂先後關係。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章