1. 程式人生 > >異常處理(程序健壯性→功能→性能)

異常處理(程序健壯性→功能→性能)

父類 位置 jdk 報錯 fin 允許 代碼 沒有 多層

異常 (Exception):發生於程序執行期間,表明出現了一個非法的運行狀況。許多JDK中的方法在檢測到非法情況時,都會拋出一個異常對象。
例如:數組越界和被0除。

技術分享圖片

try{
//可能發生運行錯誤的代碼;
}
catch(異常類型 異常對象引用){
//用於處理異常的代碼
}
finally{
//用於“善後” 的代碼
}

①把可能會發生錯誤的代碼放進try語句塊中。
當程序檢測到出現了一個錯誤時會拋出一個異常對象。異常處理代碼會捕獲並處理這個錯誤。

catch語句塊中的代碼用於處理錯誤。

③當異常發生時,程序控制流程由try語句塊跳轉到catch語句塊。
不管是否有異常發生,finally語句塊中的語句始終保證被執行。


⑤如果沒有提供合適的異常處理代碼,JVM將會結束掉整個應用程序。

異常的“多態”特性:

①可以有多個catch語句塊,每個代碼塊捕獲一種異常。在某個try塊後有兩個不同的catch 塊捕獲兩個相同類型的異常是語法錯誤。
②使用catch語句,只能捕獲Exception類及其子類的對象。因此,一個捕獲Exception對象的catch語句塊可以捕獲所有“可捕獲”的異常。
③將catch(Exception e)放在別的catch塊前面會使這些catch塊都不執行,因此Java不會編譯這個程序。

finally:

資源泄露:當一個資源不再被某應用程序使用,但此程序並未向系統聲明不再使用此資源時發生這種情況。
②finally語句塊主要用於解決資源泄露問題,它位於catch語句塊之後,JVM保證它們一定執行。
③註意:finally語句塊中也可能發生異常,如果這種情況發生,先前的異常被放棄。

④當有多個嵌套的try…catch…finally時,要特別註意finally的執行時機。
特別註意:
當有多層嵌套的finally時,異常在不同的層次拋出 ,在不同的位置拋出,可能會導致不同的finally語句塊執行順序。

THROWS語句:

①throws語句表明某方法中可能出現某種(或多種)異常,但它自己不能處理這些異常,而需要由調用者來處理。
②當一個方法包含throws子句時,需要在調用此方法的代碼中使用try/catch/finally進行捕獲,或者是重新對其進行聲明,否則編譯時報錯。

③throws語句中聲明的異常稱為受控(checked)的異常,通常直接派生自Exception類。
④RuntimeException(其基類為Exception) 和Error(基類為Throwable)稱為非受控的異常。這種異常不用在throws語句中聲明。//程序聲明

⑤一個子類的throws子句拋出的異常,不能是其基類同名方法拋出的異常對象的父類。//程序聲明

技術分享圖片

Java 7 及以後的版本,允許在一個catch塊中捕獲多個異常。//程序

異常處理(程序健壯性→功能→性能)