Appearance
以下是修复后的 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
用于释放资源,确保必要操作总被执行。- 合理选择捕获或抛出异常,有助于提高程序的健壮性和可维护性。