异常处理
定义
异常处理是Java中用于处理程序运行时出现的错误或异常情况的机制,主要包括try-catch-finally、throw和throws等关键字。
作用
异常处理在实际开发中具有以下重要价值: 1. 错误处理:优雅地处理程序错误 2. 程序健壮性:提高程序的可靠性 3. 资源管理:确保资源正确释放 4. 调试信息:提供详细的错误信息 5. 代码可维护性:提高代码的可维护性
图表说明
try-catch-finally流程
graph TD
A[开始] --> B[执行try块]
B --> C{是否发生异常?}
C -->|是| D[执行catch块]
C -->|否| E[执行finally块]
D --> E
E --> F[结束]
异常传播流程
graph TD
A[方法A] --> B[方法B]
B --> C[方法C]
C --> D{发生异常}
D -->|未捕获| E[向上传播]
E --> F[方法B捕获]
F --> G[处理异常]
G --> H[继续执行]
例子
import java.io.File;
import java.io.FileNotFoundException;
public class ExceptionDemo {
public static void main(String[] args) {
// try-catch示例
System.out.println("try-catch示例:");
try {
int result = divide(10, 0);
System.out.println("结果: " + result);
} catch (ArithmeticException e) {
System.out.println("捕获到异常: " + e.getMessage());
}
// try-catch-finally示例
System.out.println("try-catch-finally示例:");
try {
int[] arr = new int[5];
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界: " + e.getMessage());
} finally {
System.out.println("finally块总是执行");
}
// 多重catch示例
System.out.println("多重catch示例:");
try {
String str = null;
System.out.println(str.length());
} catch (NullPointerException e) {
System.out.println("空指针异常: " + e.getMessage());
} catch (Exception e) {
System.out.println("其他异常: " + e.getMessage());
}
// throws示例
System.out.println("throws示例:");
try {
readFile("test.txt");
} catch (FileNotFoundException e) {
System.out.println("文件未找到: " + e.getMessage());
}
}
// 除法运算
public static int divide(int a, int b) {
return a / b;
}
// 读取文件
public static void readFile(String filename) throws FileNotFoundException {
File file = new File(filename);
if (!file.exists()) {
throw new FileNotFoundException("文件不存在: " + filename);
}
}
}
执行结果
try-catch示例:
捕获到异常: / by zero
try-catch-finally示例:
数组越界: 10
finally块总是执行
多重catch示例:
空指针异常: null
throws示例:
文件未找到: 文件不存在: test.txt
详细说明
-
try-catch-finally结构:
- try块包含可能异常的代码
- catch块处理特定类型的异常
- finally块确保资源释放
- 可以嵌套使用
-
throw和throws:
- throw用于抛出异常
- throws声明可能抛出的异常
- 可以抛出自定义异常
- 必须处理或声明异常
-
异常类型:
- 检查型异常(Checked)
- 运行时异常(Runtime)
- 错误(Error)
- 自定义异常
推演说明
-
异常处理流程:
- 执行try块代码
- 发生异常时跳转
- 匹配catch块处理
- 执行finally块
- 继续后续代码
-
异常传播流程:
- 方法抛出异常
- 向上层方法传播
- 直到被捕获处理
- 或程序终止
注意事项
- 合理使用异常处理
- 避免空的catch块
- 正确关闭资源
- 注意异常粒度
- 保持异常信息完整