[解決済み] Java の System.exit() は try/catch/finally ブロックでどのように動作するのでしょうか?重複
2023-05-10 17:15:48
質問
try/catch/finallyブロックでのreturn、つまりtryやcatchブロックでのreturnが実行されるべき場合でも、finallyでのreturnが常にそのメソッドのreturnとなるケースは頭打ちですね。
しかし、System.exit() にも同じことが当てはまるのでしょうか?例えば、tryブロックがあったとして。
try {
//Code
System.exit(0)
}
catch (Exception ex) {
//Log the exception
}
finally {
System.exit(1)
}
例外が発生しない場合、どのSystem.exit()が呼ばれるでしょうか?exitがreturn文であれば、System.exit(1)という行が常に(?)呼ばれることになるはずです。しかし、exitがreturnと異なる挙動をするかどうかはわかりません。
このコードは再現が不可能ではないにしろ、非常に難しい極端なケースにあるので、ユニットテストは書けません。今日後半に、もし空き時間があれば、実験を実行しようと思っていますが、とにかく気になるので、おそらく SO の誰かが答えを知っていて、実験を実行する前に、または実験を実行できない場合に、それを提供することができます。
どのように解決するのですか?
いいえ。
System.exit(0)
は返らず、finallyブロックは実行されません。
System.exit(int)
を投げることができます。
SecurityException
. もしそうなった場合、最終的にブロック
は
が実行されます。そして、同じプリンシパルが同じコードベースから同じメソッドを呼び出しているので、別の
SecurityException
がスローされる可能性があります。
2番目のケースの例です。
import java.security.Permission;
public class Main
{
public static void main(String... argv)
throws Exception
{
System.setSecurityManager(new SecurityManager() {
@Override
public void checkPermission(Permission perm)
{
/* Allow everything else. */
}
@Override
public void checkExit(int status)
{
/* Don't allow exit with any status code. */
throw new SecurityException();
}
});
System.err.println("I'm dying!");
try {
System.exit(0);
} finally {
System.err.println("I'm not dead yet!");
System.exit(1);
}
}
}
関連
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
セミコロン期待値エラー解決
-
Java基礎 - マッピングとQ/A
-
[解決済み] try catch finally ブロックはどのように機能するのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み】再試行キャッチはどのように実装するのですか?
-
[解決済み】try {...} finally {...} は良くて、try {...} catch{} はダメなのはなぜ?
-
[解決済み] try catch finally ブロックの中から戻るのはバッドプラクティスですか?
-
[解決済み] Java Try Catch Finally ブロック(Catchなし
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
シェルコマンドやスクリプトのJavaコール
-
Junitのユニットテストはjava.lang.Testを報告します。
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
java 365*1000*60*60*24 計算問題
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?