异常的概念与分类
Java异常机制用于处理程序运行时的错误情况。
异常概念
什么是异常
异常是程序运行过程中发生的错误事件,打断正常的执行流程。
Java
// 正常情况
int result = 10 / 2; // 结果为5
// 异常情况
int result = 10 / 0; // 抛出ArithmeticException
异常的作用
- 分离正常代码与错误处理代码
- 防止程序意外终止
- 提供错误信息便于调试
异常分类体系
Throwable顶层类
Java异常体系以Throwable为顶层父类。
Java
Throwable
├── Error(错误)
└── Exception(异常)
├── RuntimeException(非检查型)
└── 其他Exception(检查型)
Error错误
Error表示严重问题,程序无法处理。
Java
// OutOfMemoryError - 内存不足
// StackOverflowError - 栈溢出(无限递归)
public void recursion() {
recursion(); // 无限递归导致StackOverflowError
}
// Error通常不捕获,程序终止
Error属于JVM级别问题,程序无法恢复,不建议捕获处理。
Exception异常
Exception表示程序可以处理的错误。
检查型异常(Checked Exception) 编译时强制检查,必须处理。
Java
// IOException、SQLException、ClassNotFoundException
// 编译时强制要求处理
public void readFile() throws IOException {
FileReader reader = new FileReader("file.txt");
}
非检查型异常(Unchecked Exception) RuntimeException及其子类,编译时不强制处理。
text
// NullPointerException、ArithmeticException
// ArrayIndexOutOfBoundsException、ClassCastException
// 编译不强制处理,但运行时会抛出
String str = null;
str.length(); // NullPointerException
常见异常类型
RuntimeException子类
| 异常类 | 说明 | 示例 |
|---|---|---|
| NullPointerException | 空指针异常 | 调用null对象方法 |
| ArithmeticException | 算术异常 | 除数为零 |
| ArrayIndexOutOfBoundsException | 数组越界 | 访问不存在的索引 |
| ClassCastException | 类型转换异常 | 错误类型转换 |
| NumberFormatException | 数字格式异常 | 字符串转数字失败 |
| IllegalArgumentException | 非法参数异常 | 参数不合法 |
检查型异常
| 异常类 | 说明 |
|---|---|
| IOException | IO操作异常 |
| FileNotFoundException | 文件不存在 |
| SQLException | 数据库操作异常 |
| ClassNotFoundException | 类找不到 |
| InterruptedException | 线程中断 |
检查型与非检查型对比
| 特性 | 检查型异常 | 非检查型异常 |
|---|---|---|
| 编译时检查 | 强制处理 | 不强制 |
| 继承关系 | Exception(非Runtime) | RuntimeException |
| 代表问题 | 外部资源问题 | 程序逻辑错误 |
| 处理方式 | try-catch或throws | 可选处理 |
| 示例 | IOException | NullPointerException |
异常处理原则
何时使用检查型异常
- 外部资源不可控情况(文件、网络、数据库)
- 调用者必须知道并处理的情况
何时使用非检查型异常
- 程序逻辑错误(参数校验、空指针)
- 调用者无法恢复的情况
要点总结
- 异常是程序运行时的错误事件
- Throwable是异常体系顶层类
- Error是严重错误,程序无法处理
- Exception是可处理的异常
- 检查型异常编译时强制处理(IOException等)
- 非检查型异常编译不强制处理(RuntimeException子类)
- 检查型异常代表外部资源问题
- 非检查型异常代表程序逻辑错误
📝 发现内容有误?点击此处直接编辑