Java異常類解析

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異常

  1. Error類層次描述了Java運行時系統的內部錯誤和資源耗盡錯誤,在java的虛擬機中發生,用戶無需在程序中捕捉或者拋出,屬於unchecked exception。
  2. 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),要麼是不可控制的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章