1. ホーム

[解決済み】Javaではfinallyブロックは必ず実行されるのですか?

2022-03-18 10:16:41

質問

このコードを考慮すると、私は 絶対確実 というのは finally ブロックは常に実行され、どのような something() は?

try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("I don't know if this will get printed out");
}

解決方法は?

はい。 finally が実行された後に呼び出されます。 try または catch のコードブロックになります。

唯一の回 finally が呼ばれないのは

  1. を呼び出すと System.exit()
  2. を呼び出すと Runtime.getRuntime().halt(exitStatus)
  3. JVMが先にクラッシュした場合
  4. もし、JVMが無限ループ(または他の中断できない、終了しないステートメント)に到達した場合。 try または catch ブロック
  5. OSがJVMプロセスを強制終了した場合; 例, kill -9 <pid> UNIXの場合
  6. ホストシステムが死んだ場合; 例えば、電源障害、ハードウェアエラー、OSパニック、その他
  7. もし finally ブロックはデーモンスレッドによって実行され、他のすべての非デーモンスレッドは finally が呼び出されます。