java 異常總結
摘要:
處理異常是比正常更重要的問題,就如同醫生檢查病人,是通過各種排除法找出正確答案的。
關鍵詞: 常用 異常
前言:
實際編碼工作中,我們應該正確的使用異常表示式程式碼,儘可能的使用JDK 提供的異常類,JDK 提供了很多異常的類,我們應該掌握一些常用的類,然後舉一反三。
提高程式的健壯性,提高系統的可利用率,以前用函式返回值來判斷箇中異常,-1,-2,-3之類的容易混淆和程式碼的可讀性差。異常機制就是區分正常執和程式碼錯誤相分離。Think in java
異常的理解
異常的定義
Think in java 中定義,異常情形是阻止當前方法或作用域繼續執行的問題。過程就是
異常體系
Throwable
Error Exception
OutOfMemoryError RuntimeException IOException InterruptedException
NullPointerException SqlException IllegalArgumentException
ClassNotFoundException
異常的分類
Error:
通常描述了系統級的錯誤,並且程式猿無法主動處理
ssertionError、OutOfMemoryError、StackOverflowError
UncheckedException:
描述執行期發生,通常由於程式碼問題直接引起的程式相關的錯誤,並且程式猿無法主動處理。
AlreadyBoundException、ClassCastException、ConcurrentModificationException、IllegalArgumentException、IllegalStateException、IndexOutOfBoundsException、JSONException、NullPointerException、SecurityException、UnsupportedOperationException
非檢查異常:
JSONException:常見於json字串解析失敗的情況,但遮蔽了大量的失敗細節,往往很難根據該異常作出處理。如果專案中大量使用json,建議使用第三方的json解析庫,如gson等。
UnsupportedOperationException:這是一種編碼上的惡性妥協,經常在抽象類的成員方法中被使用者主動丟擲,表示該方法還未實現等,但由於是UncheckedException,執行期才能夠發現,完全無益於編碼期間的安全性。自己編碼時儘量不要使用。
SQLException:與JSONException原因相似,但其遮蔽的失敗細節範圍更廣。同時,SQLException還是一個CheckedException,在不能解決問題的情況下,又使程式碼變的臃腫不堪。建議同。如果做Java Web開發,熱門的ORM庫都能解決上述問題。
CheckedException:
ClassNotFoundException、CloneNotSupportedException、FileAlreadyExistsException、FileNotFoundException、InterruptedException、IOException、SQLException、TimeoutException、UnknownHostException
描述了外部環境導致的不太嚴重的錯誤,程式猿應該主動處理。注意與系統級錯誤區分,系統級錯誤通常是不可恢復的。因此,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
· ·