2012-07-18 142 views
12

通常如果任何類擴展Exception,它將成爲檢查異常。 Runtime exception也擴展了Exception。那麼它怎麼樣unchecked exception爲什麼運行時異常是未經檢查的異常?

這是否像他們有一個自定義檢查編譯器對於這種特殊情況?

編輯:我有檢查V/S未經檢查的異常及其利弊& COS等我不除在回答他們之間的差異正確的想法。

回答

19

這是明確的規範,section 11.1.1

RuntimeException及其所有子類,統稱爲運行時異常類

未經檢查的異常類是運行時異常類和錯誤類。

檢查的異常類是除未經檢查的異常類以外的所有異常類。也就是說,檢查的異常類是除了RuntimeException及其子類和Error及其子類之外的Throwable的所有子類。

所以,是的,編譯器肯定知道RuntimeException

+0

爲什麼我們無法檢查運行時異常?因爲我們知道可能有NullPointerException,那麼我們應該檢查它。任何想法? – UnKnown 2016-03-19 10:59:03

+1

@UnKnown:不,你不希望你寫的每一個方法都要捕獲或者聲明NullPointerException ...那太可怕了。 – 2016-03-19 11:30:30

+0

從概念上說,檢查和未檢查的異常之間沒有區別?只是實施有所作爲? – UnKnown 2016-03-19 11:33:16

7

是的。除Error,RuntimeException及其(直接或間接)子類以外,任何Throwable都是檢查的例外。

但是,這些由編譯器檢查,而不是由JVM檢查;檢查異常是編譯時功能,而不是運行時功能。 (更新:而我現在看到你編輯你的問題,指定「編譯」,而不是「JVM」☺。)


爲了進一步詳細一點。 。 。它並不像有任何種類的「檢查異常」界面。邏輯是簡單的硬編碼:「任何異常類都是檢查異常,除非它是RuntimeExceptionError的子類型」。

+0

+1指出編譯器檢查異常。 – DerMike 2012-07-18 18:31:03

+0

謝謝你。更新了問題☺ – 2012-07-18 18:32:41

0

作爲每11.1.1.例外

例外是由類Throwable(Object的直接子類)或其子類之一的實例表示的種類。

Throwable及其所有子類統稱爲異常類。

注意Throwable的子類必須不能通用(§8.1.2)。

類Exception和Error是Throwable的直接子類。

異常是普通程序可能希望恢復的所有異常的超類。

錯誤是從普通程序通常不被預期收回所有異常的超類。

錯誤及其所有子類統稱爲錯誤類。

類錯誤是Throwable的一種單獨的亞類中,從不同的異常在類層次結構,以允許程序使用的習語「}趕上(例外五){」(§11.2.3),以捕獲所有的異常從哪個恢復可能是可能的,而不會捕獲通常不可能恢復的錯誤。

RuntimeException類是Exception的直接子類。 RuntimeException是所有可能在表達式評估過程中由於許多原因而拋出的異常的超類,但是從中恢復仍然是可能的。

的RuntimeException及其所有子類,統稱爲運行時異常類。

的未經檢查的異常類是運行時異常類和錯誤類。

選中的異常類比未經檢查的異常類之外的所有異常類。也就是說,檢查的異常類是除了RuntimeException及其子類和Error及其子類之外的Throwable的所有子類。

相關問題