簡體   English   中英

難道NoClassDefFoundError總是有ClassNotFoundException引起的嗎?

[英]Does NoClassDefFoundError have always ClassNotFoundException in caused by?

我是否可以假定從JDK類加載機制拋出的每個NoClassDefFoundError都會始終將ClassNotFoundException作為堆棧ClassNotFoundException中的原因?

另外,實際上在哪里拋出NoClassDefFoundError ,並將其原因初始化為ClassNotFoundException 我找不到負責該邏輯的Java代碼。

這是通常堆棧跟蹤對我的外觀:

Exception in thread "main" java.lang.NoClassDefFoundError: package/Missing
    at package.Missing(Missing.java:110)
Caused by: java.lang.ClassNotFoundException: package.Missing
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

我是否可以假定從JDK類加載機制拋出的每個NoClassDefFoundError都會始終將ClassNotFoundException作為堆棧跟蹤中的原因?

這是一個合理的假設。 根據Java虛擬機規范

如果Java虛擬機曾經在驗證(第5.4.1節)或解析(第5.4.3節)(但沒有初始化(第5.5節))期間嘗試加載類C,則嘗試啟動用於加載C的類加載器拋出ClassNotFoundException的實例,則Java虛擬機必須拋出NoClassDefFoundError的實例,其原因是ClassNotFoundException的實例。

我相信以上內容也可以回答您的第二個問題。

暫無
暫無

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

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