私はオブジェクト指向プログラミングのテストのために勉強していますが、次のコードを考慮すると、何か問題があるかどうか疑問に思っていました:
try {
do something
} catch (someException e) {
} finally {
do something
}
finally
ブロックは実行されませんか?
私はオブジェクト指向プログラミングのテストのために勉強していますが、次のコードを考慮すると、何か問題があるかどうか疑問に思っていました:
try {
do something
} catch (someException e) {
} finally {
do something
}
finally
ブロックは実行されませんか?
はい。Java VM をクラッシュさせたり、ネイティブ コードを介して何かをいじったりすると、プログラムが終了するか、try
ブロック内で無限にループ/待機します。
これらは、finally
ブロックの実行を回避する唯一の 3 つのケースです。
System.exit(0)
で呼び出す場合try
。または、JVM を終了またはハングさせるもの (デッドロックなど) を作成します。そうでなければ - いいえ。
Java 言語仕様では、try ステートメントが完了する前に finally が呼び出されることが保証されています。
try ステートメントは、Borealid の回答に列挙されている通常の理由で完了しない場合があります。
コントロールが try または catch ブロックから出た場合、finally ブロックは確実に実行されます。コントロールがこれらのブロックから出てくるのをどうにかして止めた場合:
終了ステートメントを書くことによって、または
無限ループなど
その後、finally ブロックは実行されません。通常、「クリーンアップ」の目的で finally ブロックを記述します。