NoClassDefFoundError与ClassNotFoundException

343 阅读1分钟

NoClassDefFoundError(错误)

运行时异常:编译时没有异常,但运行时抛出异常。

  • NoClassDefFoundError 是由于 JVM 或 ClassLoader 尝试加载某个类的方法或 new 类的新实例,而试图加载该类的定义时,却无法找到其定义,而抛出的异常。需要注意,对于抛出该异常的情况,试图找到的类的定义在编译时存在,只是在运行时不知所踪。

NoClassDefFoundError 有两种情况:

  • 如果无法找到类文件,错误信息为 java.lang.NoClassDefFoundError:XXX
    • 这种错误可能是打包时,依赖包没有被打入包中。
    • jar包出现损坏或者篡改
  • 如果类文件初始化错误,错误信息为NoClassDefFoundError: Could not initialize class
    • 这种错误通常由类的静态成员和静态初始化语句块引起的

ClassNotFoundException(异常)

Java支持使用Class.forName方法来动态地加载类,如果该类在类路径没有被找到会抛出该异常。