记录
| 日期 | 说明 |
|---|---|
| 2023/1/1 | 首次创建 |
总纲
关于异常捕获的一些概念
类型
- 检查性异常
- 运行时异常
- 错误
捕获异常
- catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try后面的catch块就会被检查。如果发生的有异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样的
多重捕获块
- 一个try代码块后面跟随多个catch代码块的情况。发生异常时一次匹配异常类型,知道遇到合适的类型
throws/throw
- 如果一个方法没有活到一个检查行异常,那么改方法必须使用throws关键字来声明。throws关键字放在方法签名的尾部。以恶搞方法可以声明抛出多个异常,多个异常之间用逗号隔开。
- 也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。throw必须配合try-catch或者throws使用
- throw和return都能造成程序跳出
- throw RuntimeException可以不用throws说明,因为这是运行时错误,java虚拟机会自动抛出,不必在异常说明中列出来
Throwable
- Error
- VitualMachineError
- AWTError
- ...
- Exception
- IOException
- RuntimeException
- ...
自定义异常
- 所有异常必须是Throwable的子类
- 运行时异常类需要继承RunTimeException
- 检查性异常需要继承Exception
finally
- finally关键字用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码总会被执行
- 当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行
- 4种情况不会执行finally
- 在finally语句块中发生了异常
- 在前面的代码中使用了
System.exit退出程序 - 程序所在的线程死亡
- 关闭CPU
- finally里抛出异常或return可能会造成try或catch里异常丢失或return失效