异常处理
定义
异常处理是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块
 - 正确关闭资源
 - 注意异常粒度
 - 保持异常信息完整