Problem 66 Java异常基类Throwable?

本文深入探讨了Java语言中所有错误和异常的基类Throwable及其子类Exception、RuntimeException和Error的应用。详细介绍了如何使用Throwable类进行异常抛出、捕获及链接,并通过示例代码展示了在方法异常捕获中的应用。同时,解释了如何利用addSuppressed方法避免某些异常被捕获。

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

Problem 66 Java异常基类Throwable?

Ans:

Throwable类是Java语言中所有错误和异常的基类。只有此类及其子类的实例才能被JVM或Java代码中作为异常抛出,同时catch语句也只接受Throwable类及其子类作为其参数类型。

Exception,RuntimeException以及Error均是Throwable类,其中Java代码中,只需要捕获Exception及其子类定义的异常类型,RuntimeException是一个特殊的异常类,一般由JVM抛出。Error类也不需要捕获,所以在方法异常捕获声明中,也不需要通过throws语句指明。

Throwable可以设置cause参数,即将两个Throwable类链接起来,可以在构造函数中传入Throwable类型的cause参数或通过initCause设置。第一个异常将被捕获,第二个异常将被抛出。

 

class MyException extends Exception {

    

}

class MyException2 extends Exception {

    

}

class MyException3 extends Exception {

    

}

 

class WhoCalled2 {

    public void f()  throws MyException2, Throwable{

        try {

            g();

        } catch (MyException e) {

            throw new MyException2().initCause(new MyException3());

         //   throw new RuntimeException(new MyException2());

        }

    }

    

    public void g() throws MyException {

        throw new MyException();

    }

}

 

调用函数f()时,捕获异常,将有如下输出:

com.fyj.test.MyException2

at com.fyj.test.WhoCalled2.f(ExceptionTest.java:62)

at com.fyj.test.ExceptionTest.doTest(ExceptionTest.java:24)

at com.fyj.test.Main.main(Main.java:17)

Caused by: com.fyj.test.MyException3

... 3 more

最后,addSuppressed这个方法,可以让一个Exception被当前的Exception阻拦,即不会被Catch捕获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值