ClassNotFoundException和NoClassDefFoundError

ExceptionError 都继承于 Throwable,Throwable 是 所有 Error 和Exception 的超类,只有 Throwable 及其子类的实例可以被 JVM 抛出 或者被 catch 代码块捕获 ,是异常类的基本组成类型。

Exception 是程序运行时可以预料的意外情况,可能也应当被捕获并进行处理。它分为(checked)可检查异常和(unchecked)不检查异常。可检查异常必须在源代码中进行显式的捕获处理,Exception 的子类除了RunTimeException之外都是可检查异常。不检查异常即运行时异常(RunTimeException),如 NullPointerException 和 ArrayIndexOutOfBoundsException 等是运行时异常,这类的异常是由于代码中逻辑错误引起的,需要在编码中避免。这类异常根据具体的情况来判断是否需要被捕获,不会再编译器强制要求。

Error 是在正常的情况下较低可能发生的情况,绝大部分的 Error 会使程序进入非正常、不可恢复的状态,很难也不需要对其捕获。常见的 Error 有 OutOfMemoryError 和 StackOverflowError 等都是 Error 的子类。

ClassNotFoundException和NoClassDefFoundError_第1张图片
Throwable 及其相关子类

ClassNotFoundException 继承自 Exception,程序运行时类文件找不到会抛出此异常,这个异常应当在编码中捕获并进行处理。使用Class.forName(String name) name对应的类文件不存在时会抛出这个异常。

NoClassDefFoundError 是 Error 的子类,当 ClassLoader 试图加载类的定义而找不到这个类的定义时会发生这个错误。当 JVM 编译时能找到某个类而在运行时却找不到了,就会出现 NoClassDefFoundError(有可能是因为类名重复) 。

你可能感兴趣的:(ClassNotFoundException和NoClassDefFoundError)