3

コード:

public String get() {
try {
     //doSomething
     return "Hello";
}
finally {
     System.out.print("Finally");
}

このコードはどのように実行されますか?

4

3 に答える 3

17

これがブロックの要点であるため、VM自体が突然シャットダウンされない限り、ブロックfinallyを離れても実行されます。try

通常、ブロックはリソースをクリーンアップするために使用されます。ブロックfinally中に戻ったという理由だけでファイルハンドルを開いたままにしたくないでしょうか。これで、returnステートメントの直前にそのクリーンアップコードを配置できtryますが、コードが代わりに例外をスローした場合、クリーンアップされません。を使用すると、クリーンアップコードが実行されますが、ブロックを離れると、通常はこれが必要になります。finally

詳細については、 JLSセクション14.20.2を参照してください。また、すべてのパスがfinallyブロックの実行にどのように関係しているかに注意してください。

于 2011-02-10T13:04:35.383 に答える
3

最後に、 tryブロックで何が起こっても(失敗、戻り、例外、終了など)、常に実行されます。

このコードを実行したくない場合は、いつでもtry / catch/finallyステートメントの後に配置できます。

于 2011-02-10T13:04:42.983 に答える
0

それがまさにそのfinally目的です。内部のコードは、ブロックが残されたときに、どのように関係なく実行れます(JVMが経由または外部の理由でシャットダウンする場合を除く)。trySystem.exit()

于 2011-02-10T13:06:05.583 に答える