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
* 並捕獲的時候,就僅僅會捕獲實際發生的這個異常。並不會因爲Exception是其父類而java
* 運行Exception那個catch子句。post
* 要點2:但是假設你嘗試將範圍更大的Exception的catch語句放到的catch語句的前面,那麼就會發生spa
* catch子句不可到達的錯誤「Unreachablecatch block for ArithmeticException..net
* Itis already handled by the catch block for Exception」code
* 即範圍更大的異常(父類)必須放在後面,假設沒有繼承關係,比方ClassNotFoundException,blog
* 和ArithmeticException的catch子句之間就無所謂前後關係。繼承