コード:
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
このコードはどのように実行されますか?
これがブロックの要点であるため、VM自体が突然シャットダウンされない限り、ブロックfinally
を離れても実行されます。try
通常、ブロックはリソースをクリーンアップするために使用されます。ブロックfinally
中に戻ったという理由だけでファイルハンドルを開いたままにしたくないでしょうか。これで、returnステートメントの直前にそのクリーンアップコードを配置できtry
ますが、コードが代わりに例外をスローした場合、クリーンアップされません。を使用すると、クリーンアップコードが実行されますが、ブロックを離れると、通常はこれが必要になります。finally
詳細については、 JLSセクション14.20.2を参照してください。また、すべてのパスがfinally
ブロックの実行にどのように関係しているかに注意してください。
最後に、 tryブロックで何が起こっても(失敗、戻り、例外、終了など)、常に実行されます。
このコードを実行したくない場合は、いつでもtry / catch/finallyステートメントの後に配置できます。
それがまさにそのfinally
目的です。内部のコードは、ブロックが残されたときに、どのように関係なく実行されます(JVMが経由または外部の理由でシャットダウンする場合を除く)。try
System.exit()