什麼是異常處理機制:
異常處理機制:
讓程式發生異常時,按照程式碼預先設定的異常處理邏輯,針對性地處理異常,讓程式盡最大可能恢復正常。
Java異常處理機制:
Java程式中產生異常(函式中語句執行引發/手動throw丟擲),用一個對應型別的異常物件來封裝異常,JRE就會試圖尋找異常處理程式來處理異常。
Java異常分類:
Java異常型別的頂層父類為Throwable類,派生出Error類和Exception類。
**錯誤:**Error類以及他的子類的例項,代表了JVM本身的錯誤,錯誤不能通過程式碼處理。
**異常:**Exception以及他的子類,代表程式執行時傳送的各種不期望發生的事件,可以被Java異常處理機制使用,是異常處理的核心。
根據Javac對異常的處理要求,將異常分為兩類:非檢查異常和檢查異常
1.非檢查異常:Error和RuntimeException以及他們的子類。
javac在編譯時,不會提示和發現這樣的異常,不要求程式去處理這些異常。 這樣的異常,我們寫程式碼時可以處理(使用try-catch-finally),也可以不處理。
這樣的異常,多半是程式碼寫的有問題,應該去修正程式碼,而不是通過異常處理器去處理。
例如:
除0異常:ArithmeticException
強制型別轉換異常:ClassCastException
陣列越界異常:ArrayIndexOutOfBoundsException
空指標異常:NullPointerException
2.檢查異常:除Error和RuntimeException的其它異常。
javac強制要求為這樣的異常做預處理工作:使用try-catch語句捕獲並處理,或使用throws丟擲,否則編譯不會通過。
這樣的異常一般是由程式的執行環境導致的,如SQLException,IOException,ClassNotFoundException等。
異常處理的基本語法:
1.try-catch-finally語句塊
注意:
<1>try、catch和finally中的區域性變數之間不共享。
<2>發生異常,執行跳轉到最近的匹配異常處理catch程式碼去執行,異常處理完後,接著catch程式碼塊後面繼續執行(終結式異常處理模式)
2.在方法宣告時使用throws丟擲交給方法呼叫者去執行,或手動throw顯式丟擲一個異常。
異常鏈化:
**異常鏈化:**以一個異常物件為引數構造新的異常物件。新的異常物件將包含先前的異常的資訊。 使用一個帶有Throwable引數的構造方法實現,這個當作引數的異常為根源異常(case)。
例如:Throwable欄位cause,儲存了構造時傳遞的根源異常引數。這種設計和連結串列設計類似,因此形成了異常鏈化。