最后一块的实现

时间:2013-10-03 19:42:34

标签: java

在下面编写的代码中,虽然我没有抓住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");
  }
}

1 个答案:

答案 0 :(得分:4)

因为来自return块的finally,所以异常会被静默处理。你应该从不从finally块返回! (好吧,几乎永远不会)。

来自 Java语言规范

  

如果finally块因为S而突然完成,则try语句突然完成,原因是S(并且原因R被丢弃)。

这也意味着如果您从IllegalStateException块中抛出了另一个异常,例如finally,原始异常也将被丢弃。