コード: tryブロックで返された場合でも、finallyでコードが実行されるのはなぜですか?
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
このコードはどのように実行されますか?
コード: tryブロックで返された場合でも、finallyでコードが実行されるのはなぜですか?
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
このコードはどのように実行されますか?
これはfinally
ブロックの全体のポイントなので、VM自体が突然シャットダウンされない限り、try
ブロックをそのままにします。
通常、finally
ブロックがリソースのクリーンアップに使用されます。try
ブロックの間に返されただけなので、ファイルハンドルを開いたままにしたくない場合はありますか?今度はは、return文の直前にそのクリーンアップコードを置くことができますが、コードが例外をスローした場合にはクリーンアップされません。 finally
を指定すると、クリーンアップコードはを実行しますが、ブロックを離れるときは通常になります。これは一般的に必要なものです。
詳しくは、JLS section 14.20.2を参照してください。また、すべてのパスにブロック実行finally
がどのように関わっているかに注意してください。
最後に常にが実行されます、どんなにtryブロック(など仕上げ、リターン、例外、失敗)で何が起こりますか。
このコードを実行したくない場合は、try/catch/finally文の後に置くことができます。
finally
は何のためにあるのかを正確だ
JVMが実行されていない場合を除いて;-) JVMが強制終了されたり、コンピュータの電源が切れた場合 –
合意しましたが、NOコードが実行されることになります。これは明らかです...;) –
:try
ブロックが残っているとき内部のコードが(System.exit()
または外部の理由を経由してシャットダウンするJVMを除く)どんなに、実行されません。
試しましたか?確認するのはとても簡単です。 –