异常的结构图
异常知识点
-
异常分类:
- 按照在程序编译阶段是否被检查,异常分为编译时异常(Checked Exception)和运行时异常(Unchecked Exception)。
- 编译时异常是指必须进行显式处理的异常,例如IOException;而运行时异常是指无需显式捕获的异常,例如NullPointerException。
-
异常处理机制:
- 使用try-catch语句块来捕获异常,try块中放置可能抛出异常的代码,而catch块中处理这些异常。
- 可以使用多个catch块来处理不同类型的异常,确保每种异常都能得到适当的处理。
-
异常链:
- 可以使用异常链来连接多个异常,以便更好地追踪程序错误的来源。通过在catch块中传递异常,形成异常链。
-
finally块:
- 可以使用finally块来执行无论是否发生异常都需要执行的代码,通常用于释放资源或执行清理操作。
-
抛出异常:
- 当程序发生错误时,可以使用关键字throw来抛出一个异常实例。
-
自定义异常:
- 程序员可以根据自己的需求创建自定义异常类,通过继承Exception类或其子类,以表示特定的错误情况。
-
异常处理的最佳实践:
- 在捕获异常时,应尽量提供详细的错误信息,以便进行适当的处理和调试。
- 避免捕获异常后什么都不做,应该根据具体情况进行合理的处理,比如记录日志、提示用户或者进行异常恢复。
异常的发生
- 创建异常对象
- 让异常发生(抛出异常)
import org.junit.jupiter.api.Test;public class ExceptionTest {@Testpublic void test1() {// 1. 创建异常对象NullPointerException nullPointerException = new NullPointerException();// 2. 让异常发生throw nullPointerException;// 一般我们合并一起写throw new NullPointerException();}
}