- NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。
1)加载时从外存储器找不到需要的class就出现ClassNotFoundException
2)连接时从内存找不到需要的class就出现NoClassDefFoundError
2. ClassNotFoundException的产生原因:
Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常。
要解决这个问题很容易,唯一需要做的就是要确保所需的类连同它依赖的包存在于类路径中。
3. NoClassDefFoundError产生的原因:
如果JVM或者ClassLoader实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义。要查找的类在编译的时候是存在的,运行的时候却找不到了。这个错误往往是你使用new操作符来创建一个新的对象但却找不到该对象对应的类。这个时候就会导致NoClassDefFoundError.
由于NoClassDefFoundError是有JVM引起的,所以不应该尝试捕捉这个错误。
解决这个问题的办法就是:查找那些在开发期间存在于类路径下但在运行期间却不在类路径下的类。