1、Exception和Error都是继承了Throwable类
2、Exception又分为可检查(checked)异常和不检查(unchecked)异常,必须显式地进行捕获处理。类似 NullPointerException、ArrayIndexOutOfBoundsException
之类。
3、NoClassDefFoundError
是一个Error,而ClassNotFoundException
是一个异常。
ClassNotFoundException:
1)Java支持使用Class.forName
方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException
异常。
2)当一个类已经某个类加载器加载到内存中了,此时另一个类加载器又尝试着动态地从同一个包中加载这个类。可以通过控制动态类加载过程避免。
NoClassDefFoundError:
如果JVM
或者ClassLoader
实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义
。要查找的类在编译的时候是存在的,运行的时候却找不到了。就会导致NoClassDefFoundError。可能原因是打包过程漏掉了部分类,或者jar包出现损坏或者篡改