java - NoClassDefFoundError 和 ClassNotFoundException 之间的区别?

标签 java classloader

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

错误类状态的 Javadoc:

An Error is a subclass of Throwable 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/

相关文章:

java - 使用默认 .properties 文件配置传送 jar

android - 搜索未知 Activity (java.lang.ClassNotFoundException)

java - 不同设备制造商的传感器实现

java - 如何在 Long 类型属性的 Sql 数据实现中传递 NULL 值?

java - 日志中西里尔文日志的显示不正确

android - dalvik.system.PathClassLoader 不加载多个 JAR

java - 哪个类加载器将是线程内创建的类加载器的父级?

android - android ics下的ClassLoading

java - request.getAttribute() 在 jsp 中没有显示正确的输出

java - 如何添加数据而不覆盖现有数据?