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;
}
}
哦,不好意思,没看到是RuntimeException,该异常属于Java中的特例,因为编译器没有在这个问题上对异常说明进行强制检查,RuntimeException类型的异常也许会穿越所有的执行路径达到main方法中,而不会被捕获。对于该异常类,编译器不需要异常说明,其输出会直接报告给System.err,如果说RuntimeException在到达main方法之前没有被捕获,那么在退出当前程序的时候,会直接调用printStackTrace()方法。
你可以把这个异常理解为编程错误,所以不用抛出也是可以的
参看1-1的视频,我想是因为RuntimeException 属于unchecked exception, 对于RuntimeException,java编译器不要求把它捕获或者抛出
test2不是有try-catch语句块吗?这个语句块就是捕获异常使用的,所以当有这个语句块的时候就不用抛出异常了,你可以把test1和test2对比一下,test1中是直接抛出的异常没有try-catch的使用
Java入门第三季
409792 学习 · 4340 问题
相似问题