簡體   English   中英

如何檢查異常是編譯時檢查還是運行時檢查?

[英]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
  1. RuntimeException類是否擴展了Exception類,但仍未取消選中? 怎么樣?。
  2. 編譯器如何決定是在runtime還是compile時檢查這個類?

沒有檢查類,你在這里談論例外。 編譯時是選中還是未選中是一個例外。 必須在可能拋出的方法的簽名中捕獲或聲明已檢查的異常。 未經檢查的例外不需要任何特殊處理。

規則如下:

  1. 擴展RuntimeException所有異常類(包括RuntimeException本身)都是未經檢查的異常。
  2. 擴展Exception所有其他類都是經過檢查的異常 - 不包括RuntimeException以及其下的所有內容。
  3. Error以及下面的所有內容也未選中。

“已檢查”表示Java編譯器將檢查您的代碼是否通過捕獲它來處理異常,或者是否可能發生異常的方法具有throws子句以指示此方法可能拋出此類異常。

請參閱Oracle Java教程中的“捕獲”或“指定要求” ,其中詳細說明了這一點。

你的兩個問題的答案是:它的工作原理是這樣的,因為它在Java語言規范中被指定。

RuntimeException類是否擴展了Exception類,但仍未取消選中? 怎么樣?。

這是一個設計選擇。 Java語言的設計者決定RuntimeException和Error,以及擴展它們的類根據定義是未經檢查的異常。 所以這只是一種語言規則。

編譯器如何決定是在運行時還是編譯時檢查這個類?

編譯器檢查拋出的異常的類型。 如果是RuntimeException或Error,則取消選中該異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM