0

Java で次の try/catch ブロックがあるとします。

try{
  return;
}
catch(SomeException e){
  System.out.println(e);
}
finally{
  System.out.println("This is the finally block");
}

そして、この投稿によると:「Javaでは最終的に常に実行されますか?」プログラムの出力は「これは最終ブロックです」になることがわかります。ただし、printステートメントの前にreturnがあるため、それがどのように可能になるかわかりません...

この動作はスレッド化と関係があると思われますが、確かではありません。教えてください。ありがとうございました。

4

3 に答える 3

4

finallyreturnステートメントの前に実行されます。Java ルールは、JVMがクラッシュするか呼び出さfinallyれた場合を除き、常に実行されます。System.exit()

Java 言語仕様では、さまざまな条件での finally の実行について明確に言及しています。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2

于 2013-11-11T05:03:11.283 に答える
0

returnステートメントは、finallyブロックの実行には影響しません。ブロックが実行されない唯一の方法は、ブロックを実行する前にクラッシュ/終了finallyした場合です。詳細については、このリンクを確認してください。したがって、コードが次のように置き換えられた場合JVMfinally

try{
  System.exit(0);
}
catch(SomeException e){
  System.out.println(e);
}
finally{
  System.out.println("This is the finally block");
}

finallyブロックは実行されません

于 2013-11-11T05:08:48.857 に答える