1 層次結構
Java異常層次結構如下圖所示,所有的異常類都是從Throwable繼承而來,下一層則分爲兩個結構,Error和Exception。
Throwable -|<---Error -|<---VirtualMachineError -|<---OutOfMemoryError
| | |<---StackOverflowError
| | |<---UnknownError
| |
| |<---IOError
| |<---AWTError
| |<---ThreadDeath
|
|<---Exception -|<---RuntimeException -|<---IndexOutOfBoundsException
| |<---NullPointerException
| |<---IllegalArgumentException
| |<---ArithmeticException
| |<---ClassCastException
| |<---ConcurrentModificationException
| |<---EmptyStackException
| |<---NoSuchElementException
| |<---BufferOverflowException
| |<---UnknownTypeException
|
|<---ClassNotFoundException
|<---IOException
|<---SAXException
|<---SQLException
|<---InterruptedException
|<---TimeoutException
|<---llegalClassFormatException
|<---DataFormatException
|<---AWTException
2 error異常和exception異常
- Error類層次描述了Java運行時系統的內部錯誤和資源耗盡錯誤,在java的虛擬機中發生,用戶無需在程序中捕捉或者拋出,屬於unchecked exception。
- Exception類異常主要分爲兩大類:一般異常、RuntimeException。其中RuntimeException屬於unchecked exception,一般異常屬於checked exception。
3 checked exception和unchecked exception
Java語言規範對這兩個定義十分簡單,將派生於Error或者RuntimeException的異常稱爲unchecked異常,所有其他的異常成爲checked異常。
checked exception:一般是指程序不能直接控制的外界情況,是指在編譯的時候就需要檢查的一類exception,用戶程序中必須採用try catch機制處理或者通過throws交由調用者來處理。
unchecked exception:是指那些不需要在編譯的時候就要處理的一類異常。在java體系裏,所有的Error以及RuntimeException及其子類都是unchecked異常。
4 爲什麼要對unchecked異常和checked異常進行區分?
編譯器將檢查是否爲所有的checked exception提供了異常處理機制,比如說我們使用Class.forName()來查找給定的字符串的class對象的時候,如果沒有爲這個方法提供異常處理,編譯是無法通過的。
5 我們應該對哪些異常進行聲明?
Java規範中並沒有對unchecked exception是否拋出進行限制,unchecked exception要麼是可以避免的(Runtime Exception),要麼是不可控制的。