什么是Java中的Checked Exception和Unchecked Exception?

发布时间 2023-07-05 16:13:12作者: 一得之见

在Java中,异常被分为两种类型:Checked Exception(受检异常)和Unchecked Exception(非受检异常)。

1. Checked Exception(受检异常):
- Checked Exception是指在代码中可能出现的异常情况,必须在方法签名中声明或捕获这些异常,否则代码将无法通过编译。
- Checked Exception通常表示可预测的、可修复的错误或外部情况,例如文件不存在、网络连接失败等。
- 开发者在使用会抛出Checked Exception的方法时,必须显式地处理这些异常,比如使用try-catch块进行捕获,或在方法签名中使用throws关键字声明抛出异常。

2. Unchecked Exception(非受检异常):
- Unchecked Exception是指在代码中可能出现的异常情况,不要求在方法签名中声明或捕获这些异常,也不会强制要求开发者进行处理。
- Unchecked Exception通常表示程序错误、逻辑错误或其他预料之外的情况,例如空指针引用、数组越界等。
- Unchecked Exception是RuntimeException或其子类,它们是由Java运行时系统自动抛出的。因为不需要在方法签名中声明,所以在使用或传递这些方法时非常便利。

区分Checked Exception和Unchecked Exception有助于代码的可读性和可维护性。Checked Exception强制开发者在方法签名中显式声明和处理异常,提醒了使用该方法的开发者可能会发生异常情况,并帮助他们正确处理。而Unchecked Exception则更多地用于表示程序错误或不可控制的异常情况,通常不需要进行显式处理,以减少代码冗余。

 

当前,虽然在Java中,空指针引用和数组越界通常被认为是程序错误或逻辑错误,而不是外部情况或可修复的问题。因此,它们通常被视为Unchecked Exception,开发者不被要求在方法签名中声明或捕获这些异常。

然而,在某些情况下,我们可能希望更加谨慎地处理这些异常。例如,在某个方法中,期望某个参数不能为空并且必须在有效范围内,对于无效的参数或空引用,我们可以主动抛出一个自定义的Checked Exception,并在方法签名中进行声明,以便调用方必须处理或捕获该异常。

所以,尽管通常认为空指针引用和数组越界是Unchecked Exception,我们仍然可以根据具体情况,通过自定义的Checked Exception来主动处理这些异常。这有助于强制开发者在编码过程中更加规范和谨慎地处理这些问题。