J*a中Checked Exception与Unchecked Exception的区别

J*a异常分Checked和Unchecked两类,前者继承Exception但非RuntimeException子类,如IOException,编译期强制处理;后者继承RuntimeException或Error,如NullPointerException,编译期不强制捕获,多因程序逻辑错误导致,应预防而非捕获。

java中checked exception与unchecked exception的区别

J*a中的异常分为两大类:Checked Exception(受检异常)和Unchecked Exception(非受检异常),它们的核心区别在于编译器是否强制要求处理或声明。

Checked Exception(受检异常)

这类异常在编译阶段就会被检查,程序必须显式处理,否则无法通过编译。

特点:
  • 继承自 Exception 类,但不包括 RuntimeException 及其子类。
  • 常见例子:IOException、SQLException、ClassNotFoundException。
  • 必须用 try-catch 捕获,或者在方法签名中使用 throws 声明抛出。
  • 适用于那些程序可能恢复的外部问题,比如文件不存在、网络连接失败等。

例如,读取文件时必须处理 IOException:

MCP市场 MCP市场

中文MCP工具聚合与分发平台

MCP市场 211 查看详情 MCP市场
<font face="Courier New">
try {
    FileReader file = new FileReader("data.txt");
} catch (IOException e) {
    System.out.println("文件读取失败:" + e.getMessage());
}
</font>

Unchecked Exception(非受检异常)

这类异常在编译阶段不会被强制检查,程序可以不处理也不会报错。

特点:
  • 继承自 RuntimeExceptionError
  • 常见例子:NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException。
  • 通常由程序逻辑错误引起,应通过改进代码避免而不是捕获。
  • 不需要强制 try-catch 或 throws 声明。

比如访问数组越界:

<font face="Courier New">
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // 运行时报 ArrayIndexOutOfBoundsException
</font>

关键区别总结

  • 编译检查:Checked 异常必须处理,Unchecked 不强制。
  • 继承关系:Checked 继承 Exception(非运行时),Unchecked 通常是 RuntimeException 子类。
  • 发生原因:Checked 多为外部可恢复错误;Unchecked 多为程序逻辑缺陷。
  • 处理方式:Checked 推荐捕获并恢复;Unchecked 应该预防而非捕获。
基本上就这些。理解这两类异常有助于写出更健壮且符合规范的 J*a 代码。

以上就是J*a中Checked Exception与Unchecked Exception的区别的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。