如何解决ClassNotFoundException、NoClassDefFoundError和ExceptionInitializerError

一、ClassNotFoundException

1. 介绍

ClassNotFoundException是一个检查异常。
当应用程序试图通过其字符串名称加载类,但是在classpath中找不到具有指定名称的类时抛出。
一般发生于Class.forName(String), ClassLoader.findSystemClass(String), ClassLoader.loadClass(String, boolean)

2. 常见原因

这个异常的本质在于:你的项目中没有指定要加载的classes文件!
  1. 缺失jar包:项目中缺少对应类。
  2. jar包版本不对:也许同一个jar包,1.0版本没有这个类,在2.0版本才存在这个类。
  3. jar包冲突:项目中存在同一jar包的多个版本,JVM加载了一个没有该类的版本。

二、NoClassDefFoundError

1. 介绍

NoClassDefFoundError异常,看命名后缀是一个Error,无需用户去catch处理,与ClassNotFoundException相比有明显的区别。
本项目直接编写的类,一般不会发生这个异常。这个异常通常发生在,本项目依赖的某个jar中的某个类

调用
调用异常
本项目
jar包A
jar包B缺失
或者
发生其他错误

例如,本项目依赖了jar包A,并调用了A中的某个类的某个方法,此时编译没有问题;但这个方法的执行需要依赖jar包B,但本项目并没有依赖jar包B,就会发生此错误。

2. 常见原因

这个异常的本质在于:某个类的方法编译时可用,运行时发生了错误。
  1. 缺失jar包:运行A方法时,缺少A方法依赖的jar包。
  2. jar包版本不对:也许同一个jar包,1.0版本没有这个类,在2.0版本才存在这个类。
  3. jar包冲突:项目中存在同一jar包的多个版本,JVM加载了一个没有该类的版本。
  4. 创建对象时发生错误(构造方法、静态属性、静态代码块等抛出异常)

三、ExceptionInitializerError

1. 介绍

静态代码块静态变量的初始化期间发生异常。

2. 常见原因

  1. 构造方法出现错误。
  2. 静态方法、静态属性初始化错误。

你可能感兴趣的:(java)