NoClassDefFoundError VS ClassNotFoundException
这两者在开发过程中经常遇到。从他们的名字可以看出:NoClassDefFoundError是一个错误(Error),而 ClassNOtFoundException 是一个异常。
在Java中错误和异常是有区别的:我们可以从异常中恢复程序,但却不应该尝试从错误中恢复程序。
ClassNotFoundException异常
字面意思,class找不到。以下情况可能导致class找不到:
- Class.forName
- ClassLoader.loadClass
- ClassLoader.findSystemClass
所以ClassNotFoundException异常常出现在动态加载class时找不到对应class文件是会发生。此时可以catch来处理。
特殊情况:某个class已经加载到内存中了,另一个类加载器又尝试动态加载这个类,此时也会抛出异常
NoClassDefFoundError错误
找不到类的定义。编译时存在,运行时找不到,往往是创建类对应对象时出现错误,导致JVM抛出这个异常。常在类的构造方法或者static属性类/代码段出现错误时产生。
特殊情况:某些api接口在低版本上不兼容,如果不做处理也会抛出此类异常
现场
参考:
https://mp.weixin.qq.com/s/SDErs6EHR-PmeOF624euNw