NoClassDefFoundError扩展了LinkageError,后者又扩展了Error。
Javadoc for Error类状态:
Error
是Throwable
的子类 这表明合理应用存在严重问题 不应该试图抓住。
像Class.forName()
这样的类加载方法只在throws子句中声明ClassNotFoundException
。除了以上对Error
的描述之外,其他方式意味着在使用NoClassDefFoundError
等加载类时,我们通常不应该抓住Class.forName()
。
我的问题是NoClassDefFoundError
被抛出而不是ClassNotFoundException
的条件是什么?
答案 0 :(得分:12)
ClassNotFoundException
更有可能被抛出(您的代码) - 正是像Class.forName()
这样的事情。例如,这些名称可能来自用户输入。
NoClassDefFoundError
。类 出现在某个时间,但现在不是 - 这不仅仅是代码中的一个错误,它试图进行反射,这是一个部署错误,即没有使所有必需的类可用。据我所知,NoClassDefFoundError
通常或可能总是包裹一个ClassNotFoundException
- 但关键是这不是你的代码是为了防范,因为它表明一个可能太难以恢复的环境。
至少,这是我的理解:))
答案 1 :(得分:0)
NoClassDefFoundError在运行时发生,因为编译器无法找到.class文件。