![](/img/trans.png)
[英]NoClassDefFoundError: … Caused by 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.