在下面编写的代码中,虽然我没有捕获到ArithmeticException,但异常是自动处理的,并且使用finally块,成功地执行了main()方法的内容。然而,如果我从finally中删除返回语句,并使演示返回空,那么在执行MainThread块之后,程序抛出Exception..why,是这样的吗?
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");
}
}发布于 2013-10-04 03:47:33
因为您从finally块执行return,所以异常会被静默地处理。你应该永远不要从块中返回!(嗯,几乎永远不会)。
来自Java语言规范
如果
块由于原因S而突然完成,则try语句由于原因S(以及原因R被丢弃)而突然完成。
这也意味着如果您从finally块中抛出了一个不同的异常,比如IllegalStateException,那么原始的异常也会被丢弃。
https://stackoverflow.com/questions/19167872
复制相似问题