Java中異常的分類
所有異常,都繼承自java.lang.Throwable類。
Throwable有兩個直接子類,Error類和Exception類。
Exception
Exception則可使從任何標準Java庫的類方法,自己的方法以及運行時任何異常中拋出來的基類型。
異常可分為執行異常(RuntimeException)和檢查異常(Checked Exceptions)兩種
RuntimeException
RuntimeException在默認情況下會得到自動處理。所以通常用不著捕獲RuntimeException,但在自己的封裝里,也許仍然要選擇拋出一部分RuntimeException。
RuntimeException
是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。可能在執行方法期間拋出但未被捕獲的RuntimeException
的任何子類都無需在throws
子句中進行聲明。(java api)
它是uncheckedExcepiton。
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.EnumConstantNotPresentException
Java.lang.IllegalArgumentException
Java.lang.IllegalThreadStateException
Java.lang.NumberFormatException
Java.lang.IllegalMonitorStateException
Java.lang.IllegalStateException
Java.lang.IndexOutOfBoundsException
Java.lang.ArrayIndexOutOfBoundsException
Java.lang.StringIndexOutOfBoundsException
Java.lang.NegativeArraySizeException’
Java.lang.NullPointerException
Java.lang.SecurityException
Java.lang.TypeNotPresentException
Java.lang.UnsupprotedOperationException
CheckedException
除了runtimeException以外的異常,都屬于checkedException,它們都在java.lang庫內部定義。Java編譯器要求程序必須捕獲或聲明拋出這種異常。
一個方法必須通過throws語句在方法的聲明部分說明它可能拋出但并未捕獲的所有checkedException。
Java.lang.ClassNotFoundException
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException
Error
當程序發生不可控這種錯誤時,通常的做法是通知用戶并中止程序的執行。
與異常不同的是Error及其子類的對象不應被拋出。
Error 是 Throwable 的子類,代表編譯時間和系統錯誤,用于指示合理的應用程序不應該試圖捕獲的嚴重問題。大多數這樣的錯誤都是異常條件。雖然 ThreadDeath 錯誤是一個“正規”的條件,但它也是 Error 的子類,因為大多數應用程序都不應該試圖捕獲它。
在執行該方法期間,無需在其 throws 子句中聲明可能拋出但是未能捕獲的 Error 的任何子類,因為這些錯誤可能是再也不會發生的異常條件。
它是uncheckedExcepiton。