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

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

miccio

2015-01-07 00:36

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

  • 伊兮尘昔
    2015-01-07 15:31:17
    已采纳

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

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

  • miccio
    2015-01-07 11:04:31

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

  • 伊兮尘昔
    2015-01-07 10:18:14

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

    miccio

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

    2015-01-07 10:57:48

    共 1 条回复 >

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题