在执行Java程序的时候常常都会遇到ClassNotFoundException和NoClassDefFoundError这两个错误,它们都和类加载异常有关。
ClassNotFoundException
这个异常常常发生在显式加载一个类的时候,通常有以下三种方式会显式加载类。
- Class.forName("className")方法
- ClassLoader.loadClass("")方法
- ClassLoader.findSystemClass()方法
出现这类错误的原因就是当JVM要去指定的路径下加载这个类的字节码文件时,找不到这个文件对应的字节码,解决办法是去检查当前的classpath下是否存在该文件。如果不知道当前的classpath可以使用System.out.println(this.getClass().getClassLoader().getResource(""))来查看。
NoClassDefFoundError
这个错误在Java源代码注释中有提到出现该错误可能的情况是使用new表达式、属性引用某个类、继承了某个接口或类、以及方法中的某个参数引用了某个类这时会触发JVM隐式加载这些类时发现这些类不存在的异常,解决办法是确保引用的每个类都在当前的classpath下面。