ClassNotFoundException和NoClassDefFoundError的区别
ClassNotFoundException
ClassNotFoundException属于Exception, 从下面的继承关系图中可以发现, ClassNotFoundException直接继承自ReflectiveOperationException(反射操作异常), 通过这一点可以得知ClassNotFoundException来自于反射操作, 比如forName.forName(String className)方法, ClassLoader的findSystemClass(String name)方法, ClassLoader中的loadClass(String name). 如果在指定的路径下找不到类的定义便会产生这个异常. 可以通过try-catch或者向上层抛异常处理该异常
NoClassDefFoundError
NoClassDefFoundError是Error, 当JVM或者类加载器尝试加载一个类的定义但是没有找到该类的定义时便会抛出NoClassDefFoundError. 比如说我们想创建一个类的实例:执行new xxxxx, 但是类加载器没有找到xxxxx, 此时就会报错.出现这个错误的原因: 调用xxxxx的java文件编译时存在xxxxx的定义, 但是在执行编译后的文件时却找不到xxxxx了