在下面编写的代码中,虽然我没有抓住ArithmeticException
,但异常是自动处理的,并且使用finally
阻止,main()
方法的内容已成功执行。然而,如果我从finally中删除return语句并将demo作为返回void,则执行finally
块后的程序会抛出MainThread
Exception
..为什么会这样?
public class FinallyDemo {
int demo() {
try {
int a=5/0;
}
finally {
System.out.println("Finally Executed");
return 10;
}
}
public static void main(String s[]) {
int a=new FinallyDemo().demo();
System.out.println("Exception Handled");
}
}
答案 0 :(得分:4)
因为来自return
块的finally
,所以异常会被静默处理。你应该从不从finally块返回! (好吧,几乎永远不会)。
来自 Java语言规范:
如果finally块因为S而突然完成,则try语句突然完成,原因是S(并且原因R被丢弃)。
这也意味着如果您从IllegalStateException
块中抛出了另一个异常,例如finally
,原始异常也将被丢弃。