2011-04-11 237 views

回答

4

例外的是在程序中的邏輯錯誤。 JVM使用錯誤來指示環境出現問題,如OutOfMemoryError或IncompatibleClassChangeError。 ThreadDeath用於殺死線程。 Throwable在所有這些方面都是超級類。

在正常的程序邏輯中,你永遠不應該拋出或捕獲Throwables或Errors。我能想到捕捉錯誤的主要原因是這樣的:您正在使用自己的類加載系統,並希望隔離損壞的插件。

例如用於的ThreadDeath的JavaDoc的說:

應用程序應抓住這一類的實例只有當它必須被異步終止後清理。如果ThreadDeath被一個方法捕獲,重新拋出它是非常重要的,以便線程真正死亡。

1

Throwable Java Doc

的的Throwable類是Java語言中所有錯誤和異常的超類。只有作爲此類(或其某個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。同樣,只有這個類或它的一個子類可以是catch子句中的參數類型。

兩個子類的錯誤和異常的實例通常用於指示發生異常情況。通常情況下,這些實例是在異常情況下新創建的,以包含相關信息(如堆棧跟蹤數據)。

Exception Java Doc

的Exception類及其子類是Throwable的一種形式,它指出的條件合理的應用程序想要捕獲的。

請閱讀文檔,它解釋。

1

這是層次結構

java.lang.Object 
    java.lang.Throwable 
     java.lang.Exception 
0

Throwable可能是錯誤或異常。

從Java文檔:

Error是Throwable的子類,表示嚴重的問題,一個合理的應用程序不應該試圖捕獲。大多數此類錯誤都是異常情況。

Exception及其子類是Throwable的一種形式,表示合理應用可能需要捕獲的條件

3

Throwable類是由Exception類和Error類擴展的,所以通過使用throws Throwable你實際上是說你的方法不僅可以拋出異常,還可以拋出一個錯誤。根據文檔兩者之間的區別是,例外的是

條件合理的應用程序想要捕獲的

而錯誤表示

嚴重的問題,一個合理的應用程序應該不要試圖捕捉

請參閱here瞭解更多d etails。

0

如果Throwable只能是一個ErrorException,將有一個方法throws Throwablethrows Exception之間沒有區別,因爲Error可以隨時拋出,即使未聲明(如RuntimeException,太)。

但隨着throws Throwable聲明的方法還可以使用throw new Throwable("example");,或者是這樣的:

class CannonBall extends Throwable {} 
throw new CannonBall(); 

通常沒有理由做這樣的事情,所以在實踐中throws Throwablethrows Exception等同。