问答详情
源自:1-7 Java 中的异常链

请问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;

    }

}


提问者:miccio 2015-01-07 00:36

个回答

  • 伊兮尘昔
    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的使用