java-exception異常處理
Java標準庫內建了一些通用的異常,這些類以Throwable為頂層父類。Throwable又派生出Error類和Exception類。
錯誤:Error類以及他的子類的例項,代表了JVM本身的錯誤。錯誤不能被程式設計師通過程式碼處理,Error很少出現。
異常:Exception以及他的子類,代表程式執行時傳送的各種不期望發生的事件。可以被Java異常處理機制使用。
try塊不能單獨使用,必須和finally塊或者catch塊一起
catch塊不能單獨使用,必須始終與try塊在一起
finally塊不能單獨使用,必須始終與try塊在一起
try、catch、finally中都有return語句,先執行try或者catch中的return語句,將返回值放在一個零時快取上,再執行finally中的return語句,最終返回finnally中的值。
每一個catch塊用於處理一個異常。異常匹配是按照catch塊的順序從上往下尋找的,只有第一個匹配的catch會得到執行。匹配時,不僅執行精確匹配,也支援父類匹配,因此,如果同一個try塊下的多個catch異常型別有父子關係,應該將子類異常放在前面,父類異常放在後面,這樣保證每個catch塊都有存在的意義。
throws是另一種處理異常的方式,它不同於try…catch…finally,throws僅僅是將函式中可能出現的異常向呼叫者宣告,而自己則不具體處理,讓方法的呼叫者處理程式設計師也可以通過throw語句手動顯式的丟擲一個異常。throw語句的後面必須是一個異常物件。
throw 語句必須寫在函式中,執行throw 語句的地方就是一個異常丟擲點,它和由JRE自動形成的異常丟擲點沒有任何差別。
非檢查異常(unckecked exception):Error 和 RuntimeException 以及他們的子類。javac在編譯時,不會提示和發現這樣的異常,不要求在程式處理這些異常。所以如果願意,我們可以編寫程式碼處理(使用try…catch…finally)這樣的異常,也可以不處理。對於這些異常,我們應該修正程式碼,而不是去通過異常處理器處理 。這樣的異常發生的原因多半是程式碼寫的有問題,例如:ArithmeticException,錯誤的強制型別轉換錯誤ClassCastException,陣列索引越界ArrayIndexOutOfBoundsException,使用了空物件NullPointerException等等。
檢查異常(checked exception):除了Error 和 RuntimeException的其它異常。javac強制要求程式設計師為這樣的異常做預備處理工作(使用try…catch…finally或者throws)。在方法中要麼用try-catch語句捕獲它並處理,要麼用throws子句宣告丟擲它,否則編譯不會通過。這樣的異常一般是由程式的執行環境導致的。因為程式可能被執行在各種未知的環境下,而程式設計師無法干預使用者如何使用他編寫的程式,於是程式設計師就應該為這樣的異常時刻準備著。如SQLException , IOException,ClassNotFoundException 等。