13

私はオブジェクト指向プログラミングのテストのために勉強していますが、次のコードを考慮すると、何か問題があるかどうか疑問に思っていました:

try {
    do something
} catch (someException e) {

} finally {
    do something
}

finallyブロックは実行されませんか?

4

4 に答える 4

17

はい。Java VM をクラッシュさせたり、ネイティブ コードを介して何かをいじったりすると、プログラムが終了するか、tryブロック内で無限にループ/待機します。

これらは、finallyブロックの実行を回避する唯一の 3 つのケースです。

于 2010-08-14T17:22:54.230 に答える
5

System.exit(0)で呼び出す場合try。または、JVM を終了またはハングさせるもの (デッドロックなど) を作成します。そうでなければ - いいえ。

于 2010-08-14T17:23:01.107 に答える
2

Java 言語仕様では、try ステートメントが完了する前に finally が呼び出されることが保証されています。

try ステートメントは、Borealid の回答に列挙されている通常の理由で完了しない場合があります。

于 2010-08-14T22:36:19.490 に答える
0

コントロールが try または catch ブロックから出た場合、finally ブロックは確実に実行されます。コントロールがこれらのブロックから出てくるのをどうにかして止めた場合:

  • 終了ステートメントを書くことによって、または

  • 無限ループなど

その後、finally ブロックは実行されません。通常、「クリーンアップ」の目的で finally ブロックを記述します。

于 2015-08-02T18:55:32.703 に答える