簡體   English   中英

在運行時執行帶有已檢查異常的方法調用而不捕獲它的行為

[英]Behavior of executing a method call with a checked exception at runtime without catching it

假設我在 jar 文件 a.jar 中有一個名為 A 的調用者類,它調用一個方法讓我們說 Bb() 在一個單獨的 jar 文件 b.jar 中。

直到那里一切正常。

現在 B 包開發人員正在向 Bb() 添加一個已檢查的異常,它變得類似於 Bb() 拋出異常並重新部署 b.jar 文件。 a.jar 文件保持完好無損,因此 A 包開發人員不會注意到需要立即捕獲異常的編譯錯誤。

運行時會發生什么? 更准確地說,JVM 是如何處理的。 根據我的經驗,但令人驚訝的是,在運行時實際上沒有拋出異常的情況下,它可以順利運行。 所以看起來即使簽名在異常級別不匹配,也會執行方法解析。 另一方面,如果 Bb() 真的拋出異常,我不知道會發生什么。 這種行為是在 JVM 或 Java 語言規范中的某處指定的還是由 JVM 實現者決定的,或者甚至可以使用某些 JVM 標志選項進行配置?

感謝您的澄清

異常不是方法簽名的一部分,至少,用於識別所使用的方法。 此外,在 VM 級別,沒有“檢查異常”這樣的東西。 你可以拋出任何你喜歡的東西,即使你的方法的簽名沒有聲明它。 你認為 lombok 的 SneakyThrows 或 scala 的工作原理如何?

暫無
暫無

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

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