每個學程式設計的人在程式設計的過程中都會遇到各種異常。那麼當我們遇到異常的時候該怎麼處理呢?針對不同的異常我們又該採取什麼具體的處理方式呢?這些問題在我開始學程式設計的很長一段時間裡我都不太清楚,還好隨著不斷的學習,慢慢地對它有了一些瞭解。下面我們一起看看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異常的一些學習心得,希望能夠給看這篇文章的人一點點幫助。