菜鳥學Java(十八)——異常

劉水鏡發表於2014-03-31

每個學程式設計的人在程式設計的過程中都會遇到各種異常。那麼當我們遇到異常的時候該怎麼處理呢?針對不同的異常我們又該採取什麼具體的處理方式呢?這些問題在我開始學程式設計的很長一段時間裡我都不太清楚,還好隨著不斷的學習,慢慢地對它有了一些瞭解。下面我們一起看看Java中的各種異常。


我們先看下面這張圖:





如圖所示,Java中所有的異常都是從Throwable繼承而來,Throwable被定義在jave.lang包中,並且有兩個直接子類——Exception和Error。其中Error指的是Java虛擬機器的內部系統錯誤,而且通常情況下我們無法處理此類錯誤。今天我們主要討論Exception,所有其他的異常都是Exception的子類,而且只有這些異常才是程式設計師可以處理的。


如上圖所示,Exception有兩個重要的直接子類,分別是IOException和RuntimeException。IOException類用於處理程式的輸入輸出異常,包括鍵盤鎖定或檔案異常等;RuntimeException類用於處理從程式邏輯中產生的錯誤,例如訪問陣列下標越界、空指標異常等。


常見異常:

異常類名稱

 異常類含義

ArithmeticException

 算術異常類

ArrayIndexOutOfBoundsException

 陣列下標越界異常類

ArrayStoreException

 將與陣列型別不相容的值賦值給陣列元素時丟擲的異常

ClassCastException

 型別強制轉換異常類

ClassNotFoundException

 未找到相應類異常

EOFException

 檔案已結束異常類

FileNotFoundException

 檔案未找到異常類

IllegalAccessException

 訪問某類被拒絕時丟擲的異常

InstantiationException

 試圖通過newInstance()方法建立一個抽象類或抽象介面的例項時丟擲的異常

IOException

 輸入輸出異常類

NegativeArraySizeException

 建立元素個數為負數的陣列異常類

NullPointerException

 空指標異常類

NumberFormatException

 字串轉換為數字異常類

NoSuchFieldException

 欄位未找到異常類

NoSuchMethodException

 方法未找到異常類

SecurityException

 小應用程式(Applet)執行瀏覽器的安全設定禁止的動作時丟擲的異常

SQLException

 運算元據庫異常類

StringIndexOutOfBoundsException

 字串索引超出範圍異常

IndexOutOfBoundsException

 當某物件(如陣列或字串)的索引超出範圍時丟擲該異常


1、如果無法處理某個異常,那就不要捕獲它;

2、捕獲異常要按照從小到大的順序(例如應該先捕獲NullPointerException,然後RuntimeException,最後Exception);

3、儘量在靠近異常被丟擲的地方捕獲異常;   

4、在捕獲異常的地方將它記錄到日誌中,除非您打算將它重新丟擲;

5、按照您的異常處理必須多精細來構造您的方法;

6、需要用幾種型別的異常就用幾種,尤其是對於應用程式異常。 


捕獲適當的異常 
正確地處理異常並不是一項輕鬆的任務,這是因為異常的處理有時會導致程式出現其他不明行為。不過,以下三條規則可以幫助你避免錯誤處理異常所可能遭遇的風險。 

規則 #1: 總是捕獲扔出異常的型別而不要理睬異常的超類。 為了遵守通常的程式碼習慣,你可以採用Exception類的大寫字母作為變數名,如下所示:   
    catch(FileNotFoundException fnfe)   
以及 
    catch(SQLException sqle) 

規則 # 2: 決不讓catch塊留空。在很多情況下雖然確實編寫了try/catch塊但在程式碼的catch部分卻什麼都沒有做。或者,如果採用了日誌API(Logging API),那麼請編寫程式碼把異常寫到日誌中。 

規則 # 3: 決不扔出Exception基類的例項。開發人員應當總是扔出自己建立的異常類。 


OK,以上就是我總結整理的關於Java異常的一些學習心得,希望能夠給看這篇文章的人一點點幫助。



相關文章