XF文章笔记之《Java异常》throws字句(三)

本文深入解析Java中的异常处理机制,重点讲解throws关键字的作用及使用规范。通过实例演示如何正确声明异常,避免项目后期因异常处理不当导致的大规模代码修改。同时,文章强调在覆写函数时对异常处理的限制,确保函数抛出的异常类型符合超类的规定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

throws是声明异常,是用来列出某个函数的所有异常。
编译器强迫你必须在函数中捕获异常或者或者用throws在函数入口如声明异常。
throws用来向函数调用者发出预警,告诉调用者可能会产生哪些异常。

在项目开发周期前,请在一开始就设计好你的错误策略。请不要在项目最后才添加异常处理。

加入有个公共方法A,多个方法调用A方法,在项目后期需要在A方法中加入异常,但是A
方法又自己处理不了异常,只能在方法外边声明异常,往外抛,但是改了A方法,其他调用A
方法的就都需要修改。所以刚开始要设计好异常的处理。

全面理解throws字句

提供throws在于提醒调用者,告知可能发生的异常,
举例

class Exception1 extends Exception {
}

class Exception2 extends Exception1 {
}

class Exception3 extends Exception2 {
}

class Lazy {

    public void foo(int i) throws Exception1 {
        if (i == 1)
            throw new Exception1();
        if (i == 2)
            throw new Exception2();
        if (i == 3)
            throw new Exception3();
    }

   
}

这段代码没有问题,可以通过编译,但最好是

 public void foo(int i) throws Exception1,Exception2,Exception3{}

在覆写某个函数时,你可以从覆写函数中抛出哪些异常,哪些异常应该放进throws字句?
看代码

public class Base {
    public void foo() throws FileNotFoundException{
        throw new FileNotFoundException();
    }

}

class OverrideTest extends Base{

    @Override
    public void foo() throws Exception {
        throw new Exception();
    }

    public static void main(String[] args) {
        OverrideTest o = new OverrideTest();
        o.foo();
    }
}

这段代码编译就通不过,因为如果某个函数抛出一个异常,而该函数又覆写了supperclass函数,那么他必须受到supperclass函数所抛出异常的约束,也就是只能抛出和supperclass函数一样的异常或者是它的派生异常。对于 class OverrideTest,可以

  1. 不抛出任何异常
  2. 抛出FileNotFoundException异常
  3. 抛出FileNotFoundException的派生类异常

如果你覆写的对象没有抛出任何异常,但你的覆写函数因为增加了代码而可能引发异常,那么你必须在新函数中捕获异常并处理掉,不能将异常传播给外界。

  • 不积跬步,无以至千里 每天一点点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值