java - NoClassDefFoundError 总是由 ClassNotFoundException 引起的吗?
问题描述
我是否可以假设NoClassDefFoundError
从 JDK 类加载机制中抛出的每个问题都将始终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 的实例。
我相信上面也回答了你的第二个问题。
推荐阅读
- c++ - 在 ncurses 中使用 unicode 字符创建边框
- javascript - 如何从 Firebase 获取 .get() 以集成到 Discord.JS
- javascript - 迭代数组,里面有 promise 并等待完成
- node.js - npm install 无法为我创建的 nano-react-app 安装依赖项
- c# - 滚动条时的C#复选框标题问题
- javascript - 如果语句在使用 javascript 或 jsx 时不起作用
- java - 从第 3 方存储库下载并逐块直接上传到 S3
- java - 有没有办法让 Stack 数据结构逐部分占用与其他编码部分一起解析的文件?
- javascript - JavaScript中的自定义异步函数不起作用
- time-series - 具有时变自变量的线性回归