1. 程式人生 > >java 異常總結

java 異常總結

異常

 

摘要:

處理異常是比正常更重要的問題,就如同醫生檢查病人,是通過各種排除法找出正確答案的。

關鍵詞: 常用 異常

 

前言:

實際編碼工作中,我們應該正確的使用異常表示式程式碼,儘可能的使用JDK 提供的異常類,JDK 提供了很多異常的類,我們應該掌握一些常用的類,然後舉一反三。

提高程式的健壯性,提高系統的可利用率,以前用函式返回值來判斷箇中異常,-1-2-3之類的容易混淆和程式碼的可讀性差。異常機制就是區分正常執和程式碼錯誤相分離。Think in java 

中說異常機制使程式碼閱讀,編寫和除錯更加井井有條。


 

異常的理解 3

異常的定義 3

異常體系 3

異常的分類 3

常見的異常 4

異常設計原則 9

異常的使用 10

異常的好處 10

何時丟擲異常 10

異常表示沒有遵守契約 10

原則 10

異常設計原則: 11

異常的架構設計 11

從系統不同角度看異常 11

設計一個統一的異常處理類 12

異常層次定義 12

 

 


 

異常的理解

異常的定義

Think in java 中定義,異常情形是阻止當前方法或作用域繼續執行的問題。過程就是

new 一個異常物件,終止程式,以另一種方法執行下去。

 

異常體系  

Throwable 

Error Exception

OutOfMemoryError RuntimeException IOException InterruptedException

NullPointerException SqlException IllegalArgumentException 

ClassNotFoundException

 

異常的分類

Error:

通常描述了系統級的錯誤,並且程式猿無法主動處理

ssertionErrorOutOfMemoryErrorStackOverflowError

 

 

UncheckedException:

描述執行期發生,通常由於程式碼問題直接引起的程式相關的錯誤,並且程式猿無法主動處理。

AlreadyBoundExceptionClassCastExceptionConcurrentModificationExceptionIllegalArgumentExceptionIllegalStateExceptionIndexOutOfBoundsExceptionJSONExceptionNullPointerExceptionSecurityExceptionUnsupportedOperationException

 

 

非檢查異常:

JSONException:常見於json字串解析失敗的情況,但遮蔽了大量的失敗細節,往往很難根據該異常作出處理。如果專案中大量使用json,建議使用第三方的json解析庫,如gson等。

UnsupportedOperationException:這是一種編碼上的惡性妥協,經常在抽象類的成員方法中被使用者主動丟擲,表示該方法還未實現等,但由於是UncheckedException,執行期才能夠發現,完全無益於編碼期間的安全性。自己編碼時儘量不要使用。

SQLException:與JSONException原因相似,但其遮蔽的失敗細節範圍更廣。同時,SQLException還是一個CheckedException,在不能解決問題的情況下,又使程式碼變的臃腫不堪。建議同。如果做Java Web開發,熱門的ORM庫都能解決上述問題。

 

 

CheckedException

 

ClassNotFoundExceptionCloneNotSupportedExceptionFileAlreadyExistsExceptionFileNotFoundExceptionInterruptedExceptionIOExceptionSQLExceptionTimeoutExceptionUnknownHostException

 

描述了外部環境導致的不太嚴重的錯誤,程式猿應該主動處理。注意與系統級錯誤區分,系統級錯誤通常是不可恢復的。因此,CheckedException強制捕獲或宣告,程式猿必須處理。記錄日誌,包裝後再次丟擲,在方法簽名中宣告,是三種最常見的做法。

UncheckedException一樣,CheckedException也要保證是可控的。對CheckedException的可控性要求更高,不僅要主動檢查,還要在捕獲到異常時,作出合適的處理。

 

 

 

 

 

常見的異常

·  算術異常類:ArithmeticExecption

·  ·  空指標異常類:NullPointerException

·  ·  型別強制轉換異常:ClassCastException

·  ·  陣列負下標異常:NegativeArrayException

·  ·  陣列下標越界異常:ArrayIndexOutOfBoundsException

·  ·  違背安全原則異常:SecturityException

·  ·  檔案已結束異常:EOFException

·  ·  檔案未找到異常:FileNotFoundException

·  ·  字串轉換為數字異常:NumberFormatException

·  ·  操作資料庫異常:SQLException

·  ·  輸入輸出異常:IOException

·  ·  方法未找到異常:NoSuchMethodException

·  ·  抽象方法錯誤。當應用試圖呼叫抽象方法時丟擲 java.lang.AbstractMethodError

·  ·  斷言錯用來指示一個斷言失敗的情況:java.lang.AssertionError

·  ·  類迴圈依賴錯誤。在初始化一個類時,若檢測到類之間迴圈依賴則丟擲該異常:java.lang.ClassCircularityError

·  ·  類格式錯誤。當Java虛擬機器試圖從一個檔案中讀取Java類,檢測到該檔案的內容不符合類的有效格式時丟擲:java.lang.ClassFormatError

·  ·  錯誤。是所有錯誤的基類,用於標識嚴重的程式執行問題。這些問題通常描述一些不應被應用程式捕獲的反常情況:java.lang.Error

·  ·  初始化程式錯誤。當執行一個類的靜態初始化程式的過程中,發生了異常時丟擲。靜態初始化程式是指直接包含於類中的static語句段:java.lang.ExceptionInInitializerError

·  ·