异常体系
Throwable ├── Error │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... └── Exception ├── RuntimeException │ ├── NullPointerException │ ├── IndexOutOfBoundsException │ └── ... └── 检查型异常(Checked Exceptions) ├── IOException ├── SQLException └── ...
Error
系统级严重问题(如内存耗尽、虚拟机崩溃),程序无法恢复。
- OutOfMemoryError:内存不足。
- StackOverflowError:栈溢出。
处理方式:通常不捕获,应修复代码或调整环境;
Exception
程序可处理的异常情况
- 检查型异常(Checked Exceptions):
- 继承自Exception但不属于RuntimeException。
- 必须显式处理(try-catch或throws),否则编译失败。
- 示例:IOException、ClassNotFoundException。
- 继承自
- 非检查型异常(Unchecked Exceptions):
- 继承自RuntimeException或Error。
- 无需显式处理,通常由代码逻辑错误导致。
- 示例:NullPointerException、ArrayIndexOutOfBoundsException。
- 继承自
特性 | 检查型异常 | 非检查型异常 |
---|---|---|
继承关系 | 继承 Exception 但不包括RuntimeException | 继承 RuntimeException 或Error |
处理要求 | 必须显式处理( try-catch 或throws ) | 无需显式处理 |
典型场景 | 外部因素(如文件不存在、网络中断) | 程序逻辑错误(如空指针、数组越界) |
异常处理机制
- try...catch...:包裹代码处理异常;
- throw:显式抛出异常;
异常使用实践:
- 精准捕获:避免捕获宽泛的Exception,应针对具体异常类型;
- 自定义异常:继承Exception或RuntimeException,提供有意义的信息;
- 资源管理:优先使用try-with-resources,避免资源泄漏;
- 避免异常滥用:不要用异常控制流程(如代替条件判断);