1

在下面编写的代码中,虽然我没有捕获到ArithmeticException,但异常会自动处理并使用finallyBlock,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");
  }
}
4

1 回答 1

4

因为你returnfinally块中,异常被静默处理。你永远不应该从 finally 块返回!(嗯,几乎从来没有)。

来自Java 语言规范

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

IllegalStateException这也意味着如果您从块中抛出不同的异常,例如, finally,原始异常也将被丢弃。

于 2013-10-03T19:47:32.933 回答