Skip to content

以下是修复后的 Markdown 文档,解决了语法错误、结构混乱以及格式不一致的问题,让整个笔记更加清晰有条理:


Java 异常处理笔记

1. 基本概念

  • Java 中的异常分为两类:
    • Error:通常与虚拟机相关的问题,如内存不足、线程死亡等,无法预见和处理。
    • Exception:程序运行时的错误,需要进行处理。
      • 包括​运行时异常​(如 NullPointerException, ArithmeticException)和​非运行时异常​(如 IOException)。
  • Java 中所有的异常都继承自顶级父类 Throwable
    Throwable
    ├── Error(严重错误,不应捕获)
    └── Exception(可处理异常)
         ├── RuntimeException(运行时异常)
         └── 其他检查型异常(编译期异常)

2. try-catch 块的基本用法

java
public class ExceptionHandling {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
            System.out.println(result);
        } catch (ArithmeticException e) {
            System.out.println("除以零错误");
        }
    }
}

当执行到 10 / 0 时会抛出 ArithmeticException,然后被 catch 块捕获并打印友好消息。


3. 多个 catch 块的使用

java
try {
    // 可能的输入错误
} catch (IOException e) {
    // 处理 IO 异常
} catch (NullPointerException e) {
    // 处理空指针异常
}

不同类型的异常可以使用多个 catch 块分别处理。


4. 自定义异常

java
public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

使用自定义异常:

java
try {
    throw new MyCustomException("这是一条自定义异常");
} catch (MyCustomException e) {
    System.out.println(e.getMessage());
}

自定义异常通常用于表示业务逻辑中的特定错误。


5. finally 块的使用

java
try {
    // 可能的文件操作
} catch (IOException e) {
    // 处理 IO 异常
} finally {
    System.out.println("这总是会被执行");
}

finally 块中代码无论是否发生异常都会执行,常用于资源释放和清理工作。


6. 异常的传播(throws 关键字)

java
public void method() throws IOException {
    // 可能会抛出 IO 异常的操作
}

使用 throws 将异常抛给调用者处理,要么在调用处使用 try-catch 捕获,要么继续向上声明 throws


7. 什么时候该抛出异常,什么时候该捕获异常?

  • 当前方法不能解决异常时,应当使用 throw 抛出异常,并在方法签名中声明 throws
  • 上层调用者决定是否捕获或继续传播。
  • 如果能处理且处理该异常在逻辑上合理,使用 try-catch 处理即可。

8. 总结

  • 异常处理是 Java 编程中的重要组成部分。
  • 使用 try-catch-finally 捕获并处理异常。
  • 支持自定义异常以增强表达力和控制力。
  • finally 用于释放资源,确保必要操作总被执行。
  • 合理选择捕获或抛出异常,有助于提高程序的健壮性和可维护性。