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

请问test2() throw 的RuntimeException 为什么不需要test2() throws Exception 声明抛出异常?

请问test2() throw 的RuntimeException 为什么不需要test2() throws Exception 声明抛出异常?


public void test1() throws DrunkException{

    throw new DrunkException("喝车别开酒!");

}

public void test2(){

    try {

        test1();

    } catch (DrunkException e) {

    // TODO Auto-generated catch block

    RuntimeException newExc = 

        new RuntimeException(e);

        // newExc.initCause(e);

        throw newExc;

    }

}


正在回答

3 回答

哦,不好意思,没看到是RuntimeException,该异常属于Java中的特例,因为编译器没有在这个问题上对异常说明进行强制检查,RuntimeException类型的异常也许会穿越所有的执行路径达到main方法中,而不会被捕获。对于该异常类,编译器不需要异常说明,其输出会直接报告给System.err,如果说RuntimeException在到达main方法之前没有被捕获,那么在退出当前程序的时候,会直接调用printStackTrace()方法。

你可以把这个异常理解为编程错误,所以不用抛出也是可以的

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

参看1-1的视频,我想是因为RuntimeException 属于unchecked exception, 对于RuntimeException,java编译器不要求把它捕获或者抛出

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

test2不是有try-catch语句块吗?这个语句块就是捕获异常使用的,所以当有这个语句块的时候就不用抛出异常了,你可以把test1和test2对比一下,test1中是直接抛出的异常没有try-catch的使用

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

miccio 提问者

我理解你要的意思,但这并不是我问题的答案。try-catch只是处理了test1()产生的异常,但不处理RuntimeException()的异常。 比如你可以做个测试。 test3() { throw new RuntimeException(); } 这里也是不需要处理异常的,而你如果将test2()中catch部分中的RuntimeException()换做 new DrunkException()的话,eclipse还是会提示让你处理异常的
2015-01-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问test2() throw 的RuntimeException 为什么不需要test2() throws Exception 声明抛出异常?

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