try/catch ブロックを使用せずに finally ブロックを使用しようとしていますが、Eclipse でエラーが発生します。
try/catch ブロックを使用せずに finally ブロックを使用できますか?
try/catch ブロックを使用せずに finally ブロックを使用しようとしていますが、Eclipse でエラーが発生します。
try/catch ブロックを使用せずに finally ブロックを使用できますか?
finally
少なくともtry
ブロックcatch
が必要です。オプションです。finally ブロックのポイントは、例外がスローされたかどうかに関係なく、確実にクリーンアップされるようにすることです。JLSによると
finally 句は、制御が try ブロックまたは catch ブロックを離れた場合でも、try ブロックおよび実行される可能性のあるすべての catch ブロックの後に、finally ブロックが実行されることを保証します。
したがって、a のfinally
前には常にtry
ブロックが必要です。
try
ブロックにはブロックが必要finally
です。このtry
ブロックは、コードのどの行の後にコードが続くかを定義しfinally
ます。try
ブロックの前に例外がスローされた場合、finally
コードは実行されません。
catch
ブロックの追加はオプションです:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
try ブロックが終了すると、finally ブロックが常に実行されます。したがって、catch なしで finally を使用できますが、try を使用する必要があります。
詳細については、こちらのドキュメントを確認してください
finally
aなしで aを使用できない理由は、同じスコープ内に複数のステートメントを含めるtry
ことができ、エラーが発生した場合に関連するコードのブロックを示すためです。finally
try
finally
のもう 1 つの興味深い機能は、finally
がいつtry
入力されても実行する必要があることです。たとえば、a を使用してステートメントgoto
をスキップするとどうなるでしょうか。が の内側にあるfinally
場合はステートメントを実行しますが、 がステートメントの上/外側にある場合はコードをスキップします。で囲まれたコードにのみ関連します。試してみない場合は、何にも関係ありません。goto
try
finally
goto
try
finally
finally
try
finally
オラクルトレイルから:
try ブロックが終了すると、finally ブロックが常に実行されます。これにより、予期しない例外が発生した場合でも、finally ブロックが実行されます。
上記のステートメントから、finally ブロックを単独で使用することはできません。以下は許可されている組み合わせです。
最後にキャッチしてみてください
キャッチしてみてください
最後に試してください
finally
プログラム制御フローが対応するブロックに入ると、ブロック内のコードが実行されることが保証されtry
ます。finally
したがって、なしで を使用しても意味がありませんtry
。
これに対する唯一の例外は、仮想マシンをシャットダウンするため、プログラムがブロックのSystem.exit(...)
前に呼び出しに遭遇した場合です。finally
いいえ、できません
Try-catch-finally
または使用できますtry-finally
try {
}catch (Exception e){
}
finally{
}
また
try {
}
finally{
}