Javaで以下の違いを知りたい
System.exit(0);
System.exit(-1);
System.exit(1);
上記のコードを適切に使用する必要があるのはいつですか。
Exitのパラメータは、プログラムの実行がうまくいったかどうかを示します。それは古いプログラミング言語からの一種の遺伝であり、何かがうまくいかなかったのか、そして何がうまくいかなかったのかを知るのに役立ちます。
終了コードは
0
。1
、-1
、whatever != 0
何らかのエラーが発生したときは、エラーの種類ごとに異なる値を使用できます。私が正しければ、終了コードは正の数(私はUNIXで意味する)であり、範囲によって異なります。
1-127
はユーザー定義コードです(exit(n)
を呼び出すことによって生成されます)。128-255
は、SIGSEGVまたはSIGTERMのような、異なるunixシグナルによる終了によって生成されたコードです。しかし、私はあなたがJavaでコーディングしている間気にするべきではないと思います、それはほんの少しの情報です。あなたのプログラムが標準的なツールと対話するようにするつもりなら、それは役に立ちます。
Zero
=>すべて大丈夫
Positive
=>間違って実行される可能性があるものが間違って実行された(コマンドラインが正しくない、ファイルが見つからない、サーバーに接続できない)
Negative
=>まったく期待していなかったことがうまくいかなかった(システムエラー - 予期せぬ例外 - 外部からの強制終了、例えばkill -9
)
(128を超える値は、8ビット符号付き2進数、または2の補数と見なす場合、実際には負の値になります)
ここにはたくさんの良い 標準終了コードがあります
System.exit(system call)
は、シャットダウンシーケンスを開始することによって現在実行中のJava仮想マシンを終了します。引数はステータスコードとして機能します。
慣例により、ゼロ以外のステータスコードは異常終了を示します。
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
Java でもっと読む
UnixおよびLinuxシステムでは、実行が成功した場合は0
、実行が失敗した場合は1
以上が必要です。
ゼロ以外の終了状況コード。通常は異常終了を示します。 n != 0
の場合は、さまざまなnに意味を適用するかどうかはプログラマ次第です。
https://docs.Oracle.com/javase/7/docs/api/Java/lang/System.html から。
exit(0)
は通常、成功した終了を示すために使用されます。 exit(1)
、exit(-1)
、またはその他のゼロ以外の値は、通常、終了が失敗したことを示します。
これが答えです。
System.exit(0);// normal termination - Successful - zero
System.exit(-1);//Exit with some Error
System.exit(1);//one or any positive integer // exit with some Information message
255を超えるエラーコードは、エラーコード%256に変換されます。255を超えるカスタムエラーコードを使用し、アプリケーションロジックで正確なエラーコードを期待する場合は、特に注意が必要です。 http://www.tldp.org/LDP/abs/html/exitcodes.html
他の人が0
と答えると成功を意味し、そうでなければ成功します。
Batファイル(ウィンドウ)を使用している場合はSystem.exit(x)
が有効になります。
コードJava(myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
バットファイル:
Java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
system.exit()に入れられた数の違いは他の答えで説明されています。しかし本当の違いは、System.exit()が呼び出しプロセスに返されるコードであるということです。プログラムがオペレーティングシステムによって呼び出されている場合、戻りコードは、system.exit()がすべて正常であるよりも0を返した場合、問題がない場合は、親プロセスにハンドラがある可能性があることをOSに伝えます。