Exception和Error都是Throwable的子类,在Java中只有Throwable的实例才能被抛出或者被捕获。它是异常处理机制的基本组成类型
Exception和error体现了java设计者对不同异常的情况分类。Exception是指在正常情况下,可以被预知的异常,可以并且应该被捕获,并进行相应的处理。而Error是指正常情况下,不太可能发生的情况,大多情况下的error会导致程序不正常,不可恢复,所以也没必要进行捕获处理。常见的error如:OutOfMemoryError,stackOverFlowError
Exception又分为编译时异常和运行时异常。编译时异常要求在源代码编写时必须显示进行捕获处理,而运行时异常,如NullPointerException,ArrayIndexOfBoundsException这些异常,可以通过编码避免的逻辑错误,可以根据实际情况确定是否需要进行捕获处理。
ClassNotFoundException和NoClassDefFoundError的区别。
首先从字面意思理解,一个属于Exception类的子类,另一个属于Error类的子类。
其次ClassNotFoundException是指程序运行期间,当类加载器去加载某个类的class文件时,在claapath路径中找不到该类,就会抛出ClassNotFoundException。例如:当我们使用Class。forName()去加载类时,如果没有找到该类就会抛出ClassNotFoundException。
NoClassFoundError是指类在编译时期是可用的,在运行时期时找不到该类的定义,此时就会抛出NoClassFoundError。
参考:java36讲
https://www.cnblogs.com/duke2016/p/9153241.html