一、ClassNotFoundException
1. 介绍
ClassNotFoundException是一个检查异常。
当应用程序试图通过其字符串名称加载类,但是在classpath中找不到具有指定名称的类时抛出。
一般发生于(String)
, (String)
, (String, boolean)
2. 常见原因
这个异常的本质在于:你的项目中没有指定要加载的classes文件!
-
缺失jar包
:项目中缺少对应类。 -
jar包版本不对
:也许同一个jar包,1.0版本没有这个类,在2.0版本才存在这个类。 -
jar包冲突
:项目中存在同一jar包的多个版本,JVM加载了一个没有该类的版本。
二、NoClassDefFoundError
1. 介绍
NoClassDefFoundError异常,看命名后缀是一个Error,无需用户去catch处理,与ClassNotFoundException相比有明显的区别。
本项目直接编写的类,一般不会发生这个异常。这个异常通常发生在,本项目依赖的某个jar中的某个类
。
例如,本项目依赖了jar包A,并调用了A中的某个类的某个方法,此时编译没有问题;但这个方法的执行需要依赖jar包B,但本项目并没有依赖jar包B,就会发生此错误。
2. 常见原因
这个异常的本质在于:某个类的方法编译时可用,运行时发生了错误。
-
缺失jar包
:运行A方法时,缺少A方法依赖的jar包。 -
jar包版本不对
:也许同一个jar包,1.0版本没有这个类,在2.0版本才存在这个类。 -
jar包冲突
:项目中存在同一jar包的多个版本,JVM加载了一个没有该类的版本。 - 创建对象时发生错误(构造方法、静态属性、静态代码块等抛出异常)
三、ExceptionInitializerError
1. 介绍
静态代码块
或静态变量
的初始化期间发生异常。
2. 常见原因
- 构造方法出现错误。
- 静态方法、静态属性初始化错误。