通过继承关系可以看出来ClassNotFountException
是可检查异常
NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。
NoClassDefFoundError
异常,看命名后缀是一个Error
。从类继承层次上看,NoClassDefFoundError
是从Error
继承的。和ClassNotFoundException
相比,明显的一个区别是,NoClassDefFoundError
并不需要应用程序去关心catch
的问题。
ClassNotFoundException | NoClassDefFoundError |
---|---|
从java.lang.Exception继承,是一个Exception类型 | 从java.lang.Error继承,是一个Error类型 |
当动态加载Class的时候找不到类会抛出该异常 | 当编译成功以后执行过程中Class找不到导致抛出该错误 |
一般在执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass()的时候抛出 | 由JVM的运行时系统抛出 |