NoClassDefFoundError是否始终由ClassNotFoundException引起?

时间:2018-04-24 12:03:20

标签: java classloader stack-trace noclassdeffounderror classnotfoundexception

我是否可以假设从JDK类加载机制抛出的每个NoClassDefFoundError始终都有ClassNotFoundException作为堆栈跟踪的原因?

此外,实际引发NoClassDefFoundError并将其原因初始化为ClassNotFoundException的位置?我找不到负责该逻辑的Java代码。

这就是stacktraces通常对我的看法:

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

1 个答案:

答案 0 :(得分:2)

  

我可以假设从JDK类抛出的每个NoClassDefFoundError   加载机制将始终具有ClassNotFoundException作为原因   在stacktrace中?

这是一个合理的假设。根据{{​​3}}:

  

如果Java虚拟机曾尝试在期间加载C类   验证(§5.4.1)或解决方案(§5.4.3)(但不是初始化   (§5.5)),以及用于启动C加载的类加载器   抛出ClassNotFoundException的实例,然后抛出Java Virtual   Machine必须抛出NoClassDefFoundError的实例,其原因是   ClassNotFoundException的实例。

我相信上面的问题也回答了你的第二个问题。

相关问题