1

以下のコードでは、キャッチしていArithmeticExceptionませんが、例外は自動的に処理され、finallyBlock により、main()メソッドの内容は正常に実行されます。一方、finally から return ステートメントを削除し、デモを 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 に答える