Test2()的异常问题

来源:1-7 Java 中的异常链

宝慕林9160084

2018-08-29 15:59

public void test2() {
    try {
        test1();
         } catch (OwnException e) {
             RuntimeException newExc = new RuntimeException("开车不喝酒");
             newExc.initCause(e);
             throw newExc;
         }
}

问题1、为什么test2后面不加throws

        2、test2 为什么既有try catch语句,又有throw 。 根据前面所学,二者选择一个不就好了吗?靠try catch 没法解决吗?那为什么还要抛出?

        3、不是应该只输出开车不喝酒吗?为什么连test1中的文字也输出了

写回答 关注

4回答

  • 北顾岛城
    2019-02-14 22:16:53

    我只针对你的第三个问题补充一点,对于异常的处理,并不等于使用System.out.println输出,它只是系统捕获最终异常显示出异常信息而已,它不是输出。

  • qq_Takeiteasy_2
    2018-12-24 09:55:46

    一楼回答的挺好的,我做点补充,对于问题2 二者选一个是try-catch跟throws 不是throw,throw是抛出一个异常,而throws是声明该方法可能存在的异常。对于问题3补充 test1抛出的异常被test2的try-catch捕获这个你应该是知道的。接下来的问题主要是由于 initCause引起的,如果你把initCause这句注释掉,你会发现它并没有输出test1()抛出的异常,而且不注释的情况下抛出的异常信息是以Cause by (导致)开头的,initCause把参数异常放到运行时异常里面,从而知道异常是谁抛出的,可以追溯到源头,具体我也不是很懂这个initCause做了点啥。。

  • 慕田峪7207732
    2018-08-29 18:33:21
    1. 当抛出新异常时,添加throws,throws的作用是声明异常,此处无需再声明

    2. 大体上来说此处为捕获异常并处理的方法体。此处catch中RuntimeException将捕获的异常包装成运行时异常,throw语句抛出新异常——运行时异常。

    3. try..catch..语句中 try:调用会抛出异常的方法—test1()方法

                                catch:处理该异常的代码块

         所以会执行test1()方法

  • 低調d華麗
    2018-08-29 18:26:03
    1. 语法规则 catch中抛出异常  方法后可不加关键字

    2.  try  catch 是对程序中的异常捕获并处理,没有要求说处理方式,也没有语法要求说不能抛出异常

    3. text2  调用text1 并捕获text1抛出异常,text2中newExc.initCause(e)语句功能为打印异常信息,注意其有参数 且参数为text1中异常,所以打印出 两句

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题