你是正確的擴展異常的任何類將是檢查的異常,但是你錯了你的下一個語句:
如果我通過擴展的Throwable,RuntimeException的,或者錯誤,那麼它會創建一個類未經檢查異常
如果你擴展了RuntimeException或Error,你的類將是一個未經檢查的異常。
另一方面,可以拋出異常,像異常是一個檢查異常。
下面的代碼實際上證明了這些。欲瞭解更多信息,Barry Ruzek's "Effective Java Exceptions"作出了一些非常有趣的主題閱讀。
public class JavaExceptions {
public static void throwException() throws Exception {
throw new Exception("This is a Checked Exception.");
}
public static void throwRuntimeException() throws RuntimeException {
throw new RuntimeException("This is a Runtime Exception.");
}
public static void throwError() throws Error {
throw new Error("This is an Error.");
}
public static void throwThrowable() throws Throwable {
throw new Throwable("This is a Throwable.");
}
public static void main (String... args) {
//Exception extends Throwable, thus both are checked Exceptions.
try {
throwThrowable();
throwException();
} catch (Throwable e) {
//Handle exception (or throwable in this case)...
e.printStackTrace();
}
//RuntimeException and Error are both unchecked exceptions.
throwRuntimeException();
throwError();
}
}
編輯1:在問候Error
和它的使用,這是從Oracle's Documentation採取:
一個錯誤是Throwable的子類,表示嚴重的問題,合理的應用程序不應該試圖去抓。大多數此類錯誤都是異常情況。 ThreadDeath錯誤雖然是一個「正常」條件,但也是Error的一個子類,因爲大多數應用程序不應該試圖捕獲它。 一個方法不需要在其throws子句中聲明在執行該方法期間可能拋出的錯誤的任何子類,但沒有捕獲到,因爲這些錯誤是不應該發生的異常情況。也就是說,出於編譯時檢查異常的目的,Error及其子類被視爲未經檢查的異常。
編輯2:我們在這裏處理的類可以描述如下:
Throwable extends Object
:應該由需要的任何類來擴展頂級類被拋出(如異常和錯誤)。 Throwable
s是檢查。請參閱:Throwable (Java Platform SE 7)
Error extends Throwable
:中Throwable
子類,指示嚴重的問題,合理的應用程序不應該試圖捕獲。 Overovers Throwable
功能變爲未檢查。請參閱:Error (Java Platform SE 7)
Exception extends Throwable
:Throwable
的另一個子類,指示合理應用程序可能需要捕獲的條件。像Throwable
,是檢查。請參閱:Exception (Java Platform SE 7)
RuntimeException extends Exception
:在Java虛擬機正常運行期間可引發的那些異常的超類。重寫Exception
功能將變爲未選中。請參閱:RuntimeException (Java Platform SE 7)
Throwable是異常/錯誤類什麼是Object對於所有Java類。它定義了所有Java異常應具有的基本方法和屬性(默認情況下)。錯誤與Throwable的關係類似於RuntimeException與Exception的關係。用最簡單的術語來說,錯誤是未選中的Throwables,而RuntimeExceptions是未檢查的異常。規則是:除非另有說明,否則所有Throwable都會被檢查(這是Error和RuntimeException中的情況)。我將編輯我的答案,並對這些類別進行細分。 –
要回答您的問題,錯誤未選中,因爲它們被寫入未選中狀態。一個合理的程序不應該試圖捕捉錯誤,爲什麼迫使他們檢查它們? –