文章目录
- [211. Java 异常 - Java 异常机制总结](#211. Java 异常 - Java 异常机制总结)
-
- [🎯 如何抛出异常(Throwing Exceptions)](#🎯 如何抛出异常(Throwing Exceptions))
-
- [🔸 示例:方法中抛出异常](#🔸 示例:方法中抛出异常)
- [✅ 如何捕获异常(Catching Exceptions)](#✅ 如何捕获异常(Catching Exceptions))
-
- [🔹 基本结构:](#🔹 基本结构:)
- [🔸 示例:文件读取异常处理](#🔸 示例:文件读取异常处理)
- [🔍 关键点解释](#🔍 关键点解释)
- [🔄 异常链(Exception Chaining)](#🔄 异常链(Exception Chaining))
-
- [🔸 示例:包装异常信息](#🔸 示例:包装异常信息)
- [✅ 重点强调](#✅ 重点强调)
- [🧠 小结回顾](#🧠 小结回顾)
211. Java 异常 - Java 异常机制总结
在 Java 中,异常(Exception)是用于处理程序运行时可能出现错误的一种机制。它不仅提供了清晰的错误处理流程,还提高了代码的可维护性和可读性。
🎯 如何抛出异常(Throwing Exceptions)
如果程序中出现了错误,我们可以使用 throw
语句主动抛出异常。
java
throw new IllegalArgumentException("参数不合法");
throw
后面是一个异常对象,它必须是Throwable
类的子类。- 常用的异常类包括:
IllegalArgumentException
IOException
NullPointerException
(通常由 JVM 自动抛出)
🔸 示例:方法中抛出异常
java
public void setAge(int age) throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
this.age = age;
}
如果方法中可能抛出检查型异常(Checked Exception) ,必须使用 throws
声明:
java
public void readFile(String path) throws IOException {
// 可能会抛出 IOException
}
✅ 如何捕获异常(Catching Exceptions)
Java 提供了 try-catch-finally
结构来捕获和处理异常。
🔹 基本结构:
java
try {
// 可能抛出异常的代码
} catch (ExceptionType1 e1) {
// 处理异常1
} catch (ExceptionType2 e2) {
// 处理异常2
} finally {
// 无论是否发生异常,这里的代码一定会执行
}
🔸 示例:文件读取异常处理
java
try {
FileReader reader = new FileReader("data.txt");
// 读取文件
} catch (FileNotFoundException e) {
System.out.println("文件未找到: " + e.getMessage());
} finally {
System.out.println("无论如何我都会执行");
}
🔍 关键点解释
关键语法 | 作用 | 说明 |
---|---|---|
try |
尝试执行可能抛出异常的代码 | 包围可能出错的代码块 |
catch |
处理指定类型的异常 | 可以有多个 catch 块,按从小到大顺序匹配 |
finally |
总会执行的代码块 | 常用于关闭资源、释放内存等清理操作 |
throws |
方法声明抛出异常 | 必须声明检查型异常(如 IOException ) |
throw |
主动抛出异常 | 跟随一个 Throwable 实例 |
🔄 异常链(Exception Chaining)
Java 支持异常链,即一个异常可以包含另一个异常作为其"原因"。
🔸 示例:包装异常信息
java
try {
connectToDatabase();
} catch (SQLException e) {
throw new RuntimeException("数据库连接失败", e);
}
通过异常链,我们可以保留最初的错误信息,便于排查问题。
✅ 重点强调
try-with-resources
示例(现代 Java 中的推荐做法):
java
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
String line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
🧠 小结回顾
- 异常对象 携带错误信息,通过
throw
抛出。 - 使用
try-catch-finally
来安全处理错误。 - 异常可沿方法链向上传播,直到被处理。
- 使用异常链可以追踪错误的根源。
finally
是清理资源的最佳位置。