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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33127597/article/details/83149353

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的派生类异常

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

  • 不积跬步,无以至千里 每天一点点。

猜你喜欢

转载自blog.csdn.net/qq_33127597/article/details/83149353
今日推荐