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

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

 

異常 (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塊中捕獲多個異常。//程式