我是否可以假设从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
答案 0 :(得分:2)
我可以假设从JDK类抛出的每个NoClassDefFoundError 加载机制将始终具有ClassNotFoundException作为原因 在stacktrace中?
这是一个合理的假设。根据{{3}}:
如果Java虚拟机曾尝试在期间加载C类 验证(§5.4.1)或解决方案(§5.4.3)(但不是初始化 (§5.5)),以及用于启动C加载的类加载器 抛出ClassNotFoundException的实例,然后抛出Java Virtual Machine必须抛出NoClassDefFoundError的实例,其原因是 ClassNotFoundException的实例。
我相信上面的问题也回答了你的第二个问题。