NoClassDefError是一个错误,而ClassNotFoundException是一个异常,在java中对于错误和异常的处理机制是不同的,我们可以从异常中恢复程序,而不能从错误中恢复程序。
ClassNotFoundException产生的原因:
Java支持从Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法,都将导致该类被加载到JVM虚拟机内存中,如果这个类在类路径中没有被找到,
那么此时就会抛出异常ClassNotFoundException
解决该问题需要确保所需的类连同它依赖的包存在于类路径中,常见原因在于类名书写错误。
另外还有一个导致此异常的原因:当一个类已经由一个类加载到内存了,此时另一个类加载器又尝试动态的从同一个包中加载这个类,通过控制动态类加载过程可以避免上述过程发生。
NoClassDefFoundError产生的原因在于如果JVM或者ClassLoader实例尝试加载类的时候却找不到类的定义,要查找的类在编译的时候是存在的,在编译的时候却找不到了,这时就会报此错误。
造成该问题可能是在打包过程漏掉了部分分类,或者jar包出现损害或者篡改。
解救方法:
查找那些在开发期间存在于类路径下但在运行期