NoClassDefFoundError 扩展了 LinkageError,后者又扩展了 Error。
错误类状态的 Javadoc:
An
Error
is a subclass ofThrowable
that indicates serious problems that a reasonable application should not try to catch.
Class.forName()
等类加载方法仅在 throws 子句中声明了 ClassNotFoundException
。其中,除了上面对 Error
的描述之外,我们通常不应该在使用 Class.forName()
等加载类时捕获 NoClassDefFoundError
等.
我的问题是在什么情况下会抛出 NoClassDefFoundError
而不是 ClassNotFoundException
?
最佳答案
ClassNotFoundException
在您手动加载类的情况下更有可能被抛出(对 您的 代码)- 正是对于 Class.forName( )
。例如,这些名称可能来自用户输入。
NoClassDefFoundError
当一个类文件本身引用了一个随后找不到的类时,将发生。类曾经 曾经存在,但现在不存在——这不仅仅是试图进行反射的代码中的错误,这是一个部署错误,没有使所有必需的类都可用。据我所知,NoClassDefFoundError
通常或可能总是包装 ClassNotFoundException
- 但重点是这不是什么您的代码旨在防范,因为它表明一个环境可能已经损坏到无法从中恢复。
至少,这是我的理解:)
关于java - NoClassDefFoundError 和 ClassNotFoundException 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3254751/