1. 程式人生 > >java中常見異常

java中常見異常

什麼是異常處理機制?

異常處理機制能讓程式在異常發生時,按照程式碼的預先設定的異常處理邏輯,針對性地處理異常,讓程式盡最大可能恢復正常並繼續執行,且保持程式碼的清晰。 Java中的異常可以是函式中的語句執行時引發的,也可以是程式設計師通過throw 語句手動丟擲的,只要在Java程式中產生了異常,就會用一個對應型別的異常物件來封裝異常,JRE就會試圖尋找異常處理程式來處理異常。 

Java中的異常分類

 

 

 

 

Java標準庫內建了一些通用的異常,這些類以Throwable為頂層父類。

Throwable又派生出Error類和Exception類。

錯誤:Error類以及他的子類的例項,代表了JVM本身的錯誤。錯誤不能被程式設計師通過程式碼處理,Error很少出現。因此,程式設計師應該關注Exception為父類的分支下的各種異常類。

異常:Exception以及他的子類,代表程式執行時傳送的各種不期望發生的事件。可以被Java異常處理機制使用,是異常處理的核心。

總體上我們根據Javac對異常的處理要求,將異常類分為2類。

非檢查異常(unckecked exception):Error 和 RuntimeException 以及他們的子類。javac在編譯時,不會提示和發現這樣的異常,不要求在程式處理這些異常。所以如果願意,我們可以編寫程式碼處理(使用try…catch…finally)這樣的異常,也可以不處理。對於這些異常,我們應該修正程式碼,而不是去通過異常處理器處理 。這樣的異常發生的原因多半是程式碼寫的有問題。如除0錯誤ArithmeticException,錯誤的強制型別轉換錯誤ClassCastException,陣列索引越界ArrayIndexOutOfBoundsException,使用了空物件NullPointerException等等。

檢查異常(checked exception):除了Error 和 RuntimeException的其它異常。javac強制要求程式設計師為這樣的異常做預備處理工作(使用try…catch…finally或者throws)。在方法中要麼用try-catch語句捕獲它並處理,要麼用throws子句宣告丟擲它,否則編譯不會通過。這樣的異常一般是由程式的執行環境導致的。因為程式可能被執行在各種未知的環境下,而程式設計師無法干預使用者如何使用他編寫的程式,於是程式設計師就應該為這樣的異常時刻準備著。如SQLException , IOException,ClassNotFoundException 等。

需要明確的是:檢查和非檢查是對於javac來說的,這樣就很好理解和區分了。

 RuntimeException異常,主要包括一下四種異常,陣列下標越界異常,空指標異常,型別轉換異常,算術異常。RuntimeExcepiotn異常會由Java虛擬機器自動丟擲並自動捕獲,即使我們沒有寫異常捕獲語句,在執行時仍然會丟擲異常,此類此類異常的出現絕大多數時我們程式程式碼本身有問題,需要從邏輯上改善程式碼。