Throwable 是 Java 中全部錯誤和異常的超類。Java 虛擬機僅拋出屬於此類(或其子類之一)的實例對象,或者是 throw 語句也能夠拋出該對象。一樣,catch 子句中的參數類型也只能是此類(或其子類之一)。處於編譯時檢查異常爲目的,Throwable 和其部分子類(除開 RuntimeException、Error 及它們其子類)都被視爲檢查的異常(checked exceptions),又稱爲運行時的異常,剩下的都是未檢查的異常(unchecked exceptions)。
java
一個 throwable 包含它建立時線程執行堆棧的快照。它還能夠包含一個消息字符串,該字符串提供有關該錯誤的更多信息。隨着時間的流逝,一個throwable能夠抑制其餘 throwables 的傳播。最後,throwable 還能夠包含一個緣由:另外一個致使該 throwable 構造的 throwable。此因果信息的記錄稱爲連接異常機制,由於緣由自己能夠具備緣由,依此類推,致使異常的「鏈」,每一個異常都是由另外一個緣由引發的。數組
圖中僅列出一些比較常見的異常,還有絕大部分沒有展示出來,可見 Java異常家族之大。還有就是 Error 那一塊的東西對於我來講幾乎沒有碰到過,表示運行應用程序中較嚴重問題,大多數錯誤與代碼編寫者執行的操做無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,當 JVM 再也不有繼續執行操做所需的內存資源時,將出現 OutOfMemoryError。 Exception 是程序自己能夠處理的異常。也就是你常見的空指針異常(NullPointerException),數組超出範圍異常(IndexOutOfBoundsException)等等。spa
Java的異常(包括Exception和Error)分爲已檢查的異常(checked exceptions)和非檢查的異常(unchecked exceptions)。線程
編譯器要求你必須處置的異常,代碼還沒運行,編譯器就會檢查你的代碼,會不會出現異常,要求你對可能出現的異常必須作出相應的處理。3d
對檢查異常(checked exception)的幾種處理方式:指針
注意,對於檢查的異常必須處理,或者必須捕獲或者必須拋出。除 RuntimeException 與其子類,以及 Error,其餘的都是檢查異常。對象
編譯器不要求強制處置的異常,不會在編譯的時候檢查,一一去檢查會使得工做變得更加繁瑣,只能在運行時才能檢查出來,好比空指針異常等。blog
對未檢查的異常(unchecked exception )的幾種處理方式:內存
捕獲資源
繼續拋出
不處理
通常咱們是不處理的,由於你很難判斷會出什麼問題,並且有些異常你也沒法運行時處理,好比空指針,須要人手動的去查找。RuntimeException與其子類,以及錯誤(Error),都是屬於這類異常。