(1)简单定义-什么是异常?
(2)常见比喻
(3)异常类型
(4) 异常体系图
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Throwable ├── Error(系统错误,如OutOfMemoryError) └── Exception ├── RuntimeException(运行时异常/非受检查异常) │ ├── ArithmeticException │ ├── NullPointerException │ ├── ArrayIndexOutOfBoundsException │ └── ... └── 其他(编译时异常/受检查异常) ├── IOException ├── SQLException ├── ClassNotFoundException └── ... |
(1)try-catch-finally 基本结构
1 2 3 4 5 6 7 8 9 10 |
try { // 可能抛出异常的代码 } catch (ExceptionType1 e) { // 处理ExceptionType1类型的异常 } catch (ExceptionType2 e) { // 处理ExceptionType2类型的异常 } finally { // 无论是否发生异常都会执行的代码 // 常用于资源释放 } |
多重catch块注意事项finally块的特点
子类异常必须写在父类异常前面
捕获异常后程序会继续执行
小结
无论是否发生异常都会执行
即使try或catch中有return语句,finally也会执行
唯一不执行finally的情况:System.exit()
- try:划定"危险区",包裹可能出错的代码
- catch:设置"急救站",捕获并处理特定异常
- finally:建立"清理队",确保必须执行的收尾工作
(2)throws关键字 当方法内部不处理异常时,可以使用throws声明抛出
用于方法声明,表示该方法可能抛出异常但不处理
1 2 3 |
public void readFile() throws IOException { // 方法代码 } |
(3)throw关键字
使用throw手动触发异常
主动抛出异常对象
1 2 3 |
if (age < 0) { throw new IllegalArgumentException("年龄不能为负数"); } |
(4)自定义异常
通过继承Exception或RuntimeException创建
1 2 3 4 5 |
class MyException extends Exception { public MyException(String message) { super(message); } } |
(5)异常处理注意事项