Java中的检查异常和非检查异常

本文深入探讨了Java中异常处理机制的核心概念,详细解释了检查异常与非检查异常的区别,并介绍了它们之间的继承关系。通过阅读本文,你可以了解到异常处理的基本原理以及如何在实际编程中正确使用这些异常。

java 检查异常和非检查异常

异常类的继承关系


检查异常和非检查异常并没有进行特定异常的分流
Throwable 、Exception都是检查异常。
非检查异常只有RuntimeException及其子类。

Java 中,异常分为检查异常(Checked Exceptions)检查异常(Unchecked Exceptions),它们的区别、特点及处理方式如下: ### 区别 - **编译时检查**:检查异常在编译时被强制检查,编译器会要求程序员在代码中明确处理这些异常,否则代码无法通过编译;检查异常在编译时不被强制检查,程序员可以选择捕捉处理这些异常,也可以选择让它们传播[^2]。 - **继承层次**:所有继承自 `java.lang.Exception`(除了 `RuntimeException` 及其子类)的异常都是检查异常;所有继承自 `java.lang.RuntimeException` 或 `java.lang.Error` 的异常都是检查异常[^2]。 - **用途**:检查异常主要用于表示程序运行时可以预见并且可以合理恢复的异常情况,例如文件未找到、网络连接失败等;检查异常主要用于表示编程错误或系统级严重错误,例如空指针引用、数组越界、算术异常等[^2]。 ### 特点 - **检查异常**:具有可预期性可恢复性,通常由外部因素引起,如文件操作、网络操作等[^2]。 - **检查异常**:多由编程错误导致,如代码逻辑不严谨、空指针引用等,反映了程序中的潜在问题[^2]。 ### 处理方式 - **检查异常**:必须显式捕获或在方法签名中声明抛出。可以使用 `try-catch` 语句捕获并处理异常,也可以使用 `throws` 关键字在方法签名中声明抛出异常,将异常处理的责任交给调用者[^2][^3]。 示例代码如下: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class CheckedExceptionExample { public static void main(String[] args) { try { File file = new File("test.txt"); FileInputStream fis = new FileInputStream(file); } catch (IOException e) { System.out.println("文件操作出现异常: " + e.getMessage()); } } } ``` - **检查异常**:可以选择捕获或不处理。通常建议通过修改代码来规避检查异常,而不是依赖异常处理机制。如果需要处理,可以使用 `try-catch` 语句捕获异常[^2][^3]。 示例代码如下: ```java public class UncheckedExceptionExample { public static void main(String[] args) { try { int[] arr = new int[5]; System.out.println(arr[10]); // 会抛出 ArrayIndexOutOfBoundsException } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界异常: " + e.getMessage()); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值