NoClassDefFoundError和ClassNotFoundException之间的差异?

Tah*_*tar 6 java classloader

NoClassDefFoundError扩展了LinkageError,后者又扩展了Error.

用于Error类的Javadoc状态:

An Error是一个子类Throwable ,表示合理的应用程序不应该试图捕获的严重问题.

类加载方法Class.forName()ClassNotFoundException在throws子句中声明.其中,除了上面的描述Error意味着我们通常不应该NoClassDefFoundError在加载类Class.forName()等时捕获它们.

我的问题是NoClassDefFoundError抛出的条件是什么而不是ClassNotFoundException

Jon*_*eet 12

ClassNotFoundException在你手动加载类的情况下更有可能被抛出(到你的代码) - 正是为了类似的东西Class.forName().例如,这些名称可能来自用户输入.

NoClassDefFoundError将在类文件本身引用无法找到的类时发生.类存在一段时间了,但现在还不是-这不只是一个错误的是试图做反射的代码,这不是让所有必需的类可用的部署错误.据我所知,NoClassDefFoundError通常或可能总是包装一个ClassNotFoundException- 但重点是这不是你的代码要防范的东西,因为它表明一个可能太破碎无法恢复的环境.

至少,这是我的理解:)