Java詳解之——異常機制

      提到異常,首先要說的就是Throwable類,它所有異常類的父類,它實現了包括printStackTrace()、toString()等方法。以下是JDK關於Throwable的介紹:

      

java.lang

Class Throwable

  • All Implemented Interfaces:
    Serializable
    Direct Known Subclasses:
    ErrorException
    可以看到,它有兩個直接子類——Error,Exception
    先來介紹Error。
    An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it.
    以上是JDK關於Error類的介紹。主要是說它是Throwable的子類,用來聲明一個合理的程序不應該去捕捉的嚴重問題。大多數這樣的錯誤是不正常的條件。ThreadDeath錯誤雖然是一個“正常”的狀態,也是一類錯誤,因爲大多數應用程序不應該試圖抓住它。也就是說Error類用來聲明一些系統性或資源性的錯誤,不應該由程序員捕捉,而應該由虛擬機自己處理。
    文章還提到,程序員不用爲Error類的throw添加throws語句,因爲Error錯誤是不正常的,不應該在編譯器被檢查。(unchecked)

    介紹完Error就輪到Exception了。
    Error和Exception最大的不同就是Exception會在編譯期被檢查(checked),也就是說你在程序中如果拋出了Exception,那麼就必須在方法上添加關於此類異常的拋出申明(throws),再由調用的方法實現try-catch-finally語句塊或者繼續向上拋出。但有一個子類是特殊的——RuntimeException.

    java.lang

    Class RuntimeException


    沒錯,RuntimeException是Exception的子類,也是最特殊的子類,因爲只有RuntimeException或者它的子類也是unchecked,也就是不會在編譯期被檢查。用於那些可能在方法執行期間被拋出的異常。他有兩個很著名的子類NullpointerException、ClassCastException。可以看出,這些都是在程序運行過程中可能出現的問題,所以java允許RuntimeException和它的子類在拋出時不要求方法用throws語句進行申明。

    .

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