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