【本節目标】
通過閱讀本節内容,你将了解到捕獲異常實際上也是在操作一個異常類的執行個體化對象,并學會使用Exception來捕獲自己未知的異常。
異常處理流程
在進行異常處理的時候如果将所有可能已經明确知道要産生的異常都進行了捕獲,雖然可以得到非常良好的代碼結構,但是這種代碼編寫是非常麻煩的,是以現在要想進行合理異常就必須清楚在異常産生之後程式到底做了哪些處理。

圖一 Java異常處理流程
- 在程式運作的過程之中才會産生異常,而一旦程式執行中産生了異常之後将自動進行指定類型的異常類對象執行個體化處理;
- 如果此時程式之中并沒有提供有異常處理的支援,則會采用JVM的預設異常處理方式首先進行異常資訊的列印,而後直接退出目前的程式;
- 此時程式中如果存在有異常處理,那麼這個産生的異常類的執行個體化對象将會被try語句所捕獲;
- try捕獲到異常之後與其比對的catch中的異常類型進行依次的比對,如果此時與catch中的捕獲異常類型相同,則認為應該采用此catch進行異常處理,如果不比對則繼續比對後續的catch類型,如果沒有任何的catch比對成功,那麼就表示該異常無法進行處理;
- 不管異常是否進行處理最終都要執行finally的語句,但是當執行完成finally的程式之後會進一步判斷目前的異常是否已經處理過了,如果已經處理過了,則繼續向後執行其它代碼,如果沒有處理,則交由JVM進行預設的處理。
通過分析可以發現在整個的異常處理流程之中實際上操作的還是一個異常類的執行個體化對象,那麼這個異常類的執行個體化對象的類型就成為了了解異常處理的核心關鍵所在。在之前接觸的幾種異常的兩個:
ArithmeticException: | ArrayIndexOutOfBoundsException: |
---|---|
java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.ArithmeticException | java.lang.Exception java.lang.IndexOutOfBoundsException java.lang.ArrayIndexOutOfBoundsException |
可以發現在程式之中可以處理的異常的最大的類型就是Throwable,而打開Throwable可以觀察到在此類中提供有兩個子類:
- Error:此時程式還未執行出現的錯誤,開發者無法處理;
- Exception:程式中出現的異常,開發者可以處理,真正在開發中所需要關注的就是Exception;
通過分析可以發現異常産生的時候會産生異常的執行個體化對象,那麼按照對象的引用原則,可以自動向父類轉型,那麼如果按照這樣的邏輯,實際上所有的異常都可以使用Exception來處理。
範例:簡化異常處理
public class JavaDemo{
public static void main(String args[]) {
System.out.println("【1】*****程式開始執行*****") ;
try {
int x = Integer.parseInt(args [0]) ;
int y = Integer.parseInt(args [1]) ;
System.out.println("【2】數學計算:" +(x / y)) ;
}catch (Exception e) {
e.printStackTrace() ;
}finally {
System.out.println("【F】不管是否出現異常,我都會執行。") ;
}
System.out.println("【3】*****程式執行完畢*****") ;
}
}
當不确定可能産生哪些異常的時候,這種處理是最友善的。但是如果這樣處理也會産生一個問題。這種異常處理的形式雖然友善,但是它描述的錯誤資訊不明确,分開處理異常是一種可以更加明确的處理方式。
在以後進行多個異常同時處理的時候,要把捕獲範圍大的異常 放在捕獲範圍小的異常之後。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:對異常說“我不管” | 帶你學《Java面向對象程式設計》之七十九 更多Java面向對象程式設計文章檢視此處