Throwable
:異常的基類,所有異常都繼承自?java.lang.Throwable
?類,Throwable
?類有兩個直接子類:Error
?類和?Exception
?類。Error
:是 Java 應用程序本身無法恢復的嚴重錯誤,應用程序不需要捕獲、處理這些嚴重錯誤。通常情況下,程序員無需處理此類異常。Exception
:由 Java 應用程序拋出和處理的非嚴重錯誤(即異常),也是我們本章重點學習的對象。異常可分為運行時異常(RuntimeException
)和檢查時異常(CheckedException
)兩種。RuntimeException
:運行時異常,即程序運行時拋出的異常,程序員在編程時即使不做任何處理,程序也能通過編譯。前面數組下標越界異常和除數為 0 的異常都是運行時異常。CheckedException
:檢查時異常,又稱為非運行時異常,這樣的異常要求程序員必須在編程時進行處理,否則就會編譯不通過。需要特別注意的是,在 JDK 的異常定義體系中(即在所有?Throwable
?的子類中),并不存在真正的?CheckedException
?類。也就是說,上圖中的所有類名,都能在 JDK 中找到對應的 API,但唯獨?CheckedException
?類并不是真實存在的。一般而言,如果一個類繼承自?RuntimeException
,就稱此類為運行時異常;反之,如果一個類沒有繼承?RuntimeException
,但繼承了?Exception
?或?Throwable
,就稱此類為檢查時異常。
常見異常
NullPointerException
:空指針異常(程序員經常會遇到)屬于運行時異常。解釋為程序遇到了空指針,簡單地說,就是調用了未經初始化的對象或者不存在的對象,或是訪問或修改 null 對象的屬性或方法。比如說,對數組操作時出現空指針,很多情況下是程序員把數組的初始化和數組元素的初始化混淆了,如果在數組元素還沒有初始化的情況下調用了該數組元素,則會拋出空指針異常。ClassNotFoundException
:見名知義,該異常為類沒能找到的異常。出現這種情況一般有三種原因:一是的確不存在該類;二是開發環境進行了調整,例如類的目錄結構發生了變化,編譯、運行路徑發生了變化等;三是在修改類名時,沒有修改調用該類的其他類,導致類找不到的情況。IllegalArgumentException
:拋出該異常表明向方法傳遞了一個不合法或不正確的參數。InputMismatchException
:由?Scanner
?拋出,表明?Scanner
?獲取的內容與期望類型的模式不匹配,或者該內容超出期望類型的范圍。例如需要輸入的是能轉換為?int
?型的字符串,結果卻輸入了 abc,則會拋出這個異常。IllegalAccessException
:當應用程序試圖創建一個實例、設置或獲取一個屬性,或者調用一個方法,但當前正在執行的方法無法訪問指定類、屬性、方法或構造方法的定義時,拋出?IllegalAccessException
。ClassCastException
:當試圖將對象強制轉換為不是實例的子類時,拋出該異常。SQLException
:提供關于數據庫訪問錯誤或其他錯誤信息的異常。IOException
:當發生某種 I/O 異常時,拋出此異常。此類是失敗或中斷的 I/O 操作生成的異常的通用類。
IllegalAccessException 是訪問權限不足構成的異常;ClassCastException 是類型轉換異常;InputMismatchException 通常是使用 Scanner 輸入數據時發生的異常。