提到異常,首先要說的就是Throwable類,它所有異常類的父類,它實現了包括printStackTrace()、toString()等方法。以下是JDK關於Throwable的介紹:
Class Throwable
- java.lang.Object
-
- java.lang.Throwable
-
- All Implemented Interfaces:
- Serializable
- Direct Known Subclasses:
- Error, Exception
- 可以看到,它有兩個直接子類——Error,Exception
- 先來介紹Error。
- An
Error
is a subclass ofThrowable
that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. TheThreadDeath
error, though a "normal" condition, is also a subclass ofError
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
- java.lang.Object
-
- java.lang.Throwable
-
- java.lang.Exception
-
- java.lang.RuntimeException
- 沒錯,RuntimeException是Exception的子類,也是最特殊的子類,因爲只有RuntimeException或者它的子類也是unchecked,也就是不會在編譯期被檢查。用於那些可能在方法執行期間被拋出的異常。他有兩個很著名的子類NullpointerException、ClassCastException。可以看出,這些都是在程序運行過程中可能出現的問題,所以java允許RuntimeException和它的子類在拋出時不要求方法用throws語句進行申明。
.