[英]How to determe if exception is compile time checked or runtime checked?
我正在查看RuntTimeException
類,並且未在編譯時檢查它。 為什么在編譯時沒有checked
類並在運行時checked
?
https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html
| Throwable |
+-----------+
/ \
/ \
+-------+ +-----------+
| Error | | Exception |
+-------+ +-----------+
/ | \ / | \
\________/ \______/ \
unchecked checked
+------------------+
| RuntimeException |
+------------------+
/ | | \
\_________________/
unchecked
RuntimeException
類是否擴展了Exception
類,但仍未取消選中? 怎么樣?。 runtime
還是compile
時檢查這個類? 沒有檢查類,你在這里談論例外。 編譯時是選中還是未選中是一個例外。 必須在可能拋出的方法的簽名中捕獲或聲明已檢查的異常。 未經檢查的例外不需要任何特殊處理。
規則如下:
RuntimeException
所有異常類(包括RuntimeException
本身)都是未經檢查的異常。 Exception
所有其他類都是經過檢查的異常 - 不包括RuntimeException
以及其下的所有內容。 Error
以及下面的所有內容也未選中。 “已檢查”表示Java編譯器將檢查您的代碼是否通過捕獲它來處理異常,或者是否可能發生異常的方法具有throws
子句以指示此方法可能拋出此類異常。
請參閱Oracle Java教程中的“捕獲”或“指定要求” ,其中詳細說明了這一點。
你的兩個問題的答案是:它的工作原理是這樣的,因為它在Java語言規范中被指定。
RuntimeException類是否擴展了Exception類,但仍未取消選中? 怎么樣?。
這是一個設計選擇。 Java語言的設計者決定RuntimeException和Error,以及擴展它們的類根據定義是未經檢查的異常。 所以這只是一種語言規則。
編譯器如何決定是在運行時還是編譯時檢查這個類?
編譯器檢查拋出的異常的類型。 如果是RuntimeException或Error,則取消選中該異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.