检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)

本文详细解析了检查型异常与非检查型异常的区别,包括它们的特点、处理方式及示例,帮助读者更好地理解和应用这两种异常。

检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)

这两个概念看了忘,碰着了又看,老是傻傻的分不清楚,今天把心得结合从网上搜的资料简单整理一下,希望帮自己明确区分开这两个概念,并牢牢的记住

1.检查型异常(Checked Exception)

  个人理解:所谓检查(Checked)是指编译器要检查这类异常,检查的目的一方面是因为该类异常的发生难以避免,另一方面就是让开发者去解决掉这类异常,所以称为必须处理(try ...catch)的异常。如果不处理这类异常,集成开发环境中的编译器一般会给出错误提示。

  例如:一个读取文件的方法代码逻辑没有错误,但程序运行时可能会因为文件找不到而抛出FileNotFoundException,如果不处理这些异常,程序将来肯定会出错。所以编译器会提示你要去捕获并处理这种可能发生的异常,不处理就不能通过编译。

 

2.非检查型异常(Unchecked Exception)

  个人理解:所谓非检查(Unchecked)是指编译器不会检查这类异常,不检查的则开发者在代码的编辑编译阶段就不是必须处理,这类异常一把可以避免,因此无需处理(try ...catch)。如果不处理这类异常,集成开发环境中的编译器也不会给出错误提示。

  例如:你的程序逻辑本身有问题,比如数组越界、访问null对象,这种错误你自己是可以避免的。编译器不会强制你检查这种异常。

                                       

在 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()); } } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值