Java:檢查異常與未檢查異常


一、異常的介紹

  Throwable 是 Java 中所有錯誤和異常的超類。Java 虛擬機僅拋出屬於此類(或其子類之一)的實例對象,或者是 throw 語句也可以拋出該對象。同樣,catch 子句中的參數類型也只能是此類(或其子類之一)。處於編譯時檢查異常為目的,Throwable 和其部分子類(除開 RuntimeException、Error 及它們其子類)都被視為檢查的異常(checked exceptions),又稱為運行時的異常,剩下的都是未檢查的異常(unchecked exceptions)。

  一個 throwable 包含它創建時線程執行堆棧的快照。它還可以包含一個消息字符串,該字符串提供有關該錯誤的更多信息。隨着時間的流逝,一個throwable可以抑制其他 throwables 的傳播。最后,throwable 還可以包含一個原因:另一個導致該 throwable 構造的 throwable。此因果信息的記錄稱為鏈接異常機制,因為原因本身可以具有原因,依此類推,導致異常的“鏈”,每個異常都是由另一個原因引起的。

二、Java異常結構層次圖

   圖中僅列出一些比較常見的異常,還有絕大部分沒有展現出來,可見 Java異常家族之大。還有就是 Error 那一塊的東西對於我來說幾乎沒有碰到過,表示運行應用程序中較嚴重問題,大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,當 JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。 Exception 是程序本身可以處理的異常。也就是你常見的空指針異常(NullPointerException),數組超出范圍異常(IndexOutOfBoundsException)等等。

三、檢查的異常和非檢查的異常

  Java的異常(包括Exception和Error)分為已檢查的異常(checked exceptions)和非檢查的異常(unchecked exceptions)。

① 檢查的異常

  編譯器要求你必須處置的異常,代碼還沒運行,編譯器就會檢查你的代碼,會不會出現異常,要求你對可能出現的異常必須做出相應的處理。

  對檢查異常(checked exception)的幾種處理方式:

  1.  繼續拋出,消極的方法,一直可以拋到java虛擬機來處理,就是通過throws exception拋出。
  2.  用try...catch捕獲

  注意,對於檢查的異常必須處理,或者必須捕獲或者必須拋出。除 RuntimeException 與其子類,以及 Error,其他的都是檢查異常。

② 非檢查的異常

  編譯器不要求強制處置的異常,不會在編譯的時候檢查,一一去檢查會使得工作變得更加繁瑣,只能在運行時才能檢查出來,比如空指針異常等。

  對未檢查的異常(unchecked exception )的幾種處理方式:

  1. 捕獲

  2. 繼續拋出

  3. 不處理

  一般我們是不處理的,因為你很難判斷會出什么問題,而且有些異常你也無法運行時處理,比如空指針,需要人手動的去查找。RuntimeException與其子類,以及錯誤(Error),都是屬於這類異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM