異常處理(程式健壯性→功能→效能)
異常 (Exception):發生於程式執行期間,表明出現了一個非法的執行狀況。許多JDK中的方法在檢測到非法情況時,都會丟擲一個異常物件。
例如:陣列越界和被0除。
try{
//可能發生執行錯誤的程式碼;
}
catch(異常型別 異常物件引用){
//用於處理異常的程式碼
}
finally{
//用於“善後” 的程式碼
}
①把可能會發生錯誤的程式碼
②當程式檢測到出現了一個錯誤時會丟擲一個異常物件。異常處理程式碼會捕獲並處理這個錯誤。
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塊中捕獲多個異常。//程式