为了账号安全,请及时绑定邮箱和手机立即绑定

Test2()的异常问题

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 回答

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
  1. 当抛出新异常时,添加throws,throws的作用是声明异常,此处无需再声明

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

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

                              catch:处理该异常的代码块

       所以会执行test1()方法

0 回复 有任何疑惑可以回复我~
  1. 语法规则 catch中抛出异常  方法后可不加关键字

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Test2()的异常问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信