システム。口(num)と投げるRuntimeExceptionか?
-
29-09-2019 - |
質問
私は単一のネジ付きアプリの設定をしなければなDOS errorlevelもゼロでない場合があります。ほうが良いのは捨てるRuntimeException、または利用システム。口(非ゼロ)?私はいらないスタックトレース、はないと思いこのアプリを長くする/し、繰り返し使っていました。の違いを教えてこれら二つのオプション?
解決
ない例外がスローされない限り、本当において例外的な状態です。 System.exit(int)
がありますのでご確にしました。して使用します。
編集: 思い道に惑のご質問です。と思いきいきたい口のJVM常信号うになって右からより良い例外をスローするために使用 System.exit
.
しかし、場合に発生する問題にも既に示されるJava例外でのばする例外に行く独自のレンダリングメカニズム.のあいだには例外をキャッチし、この例外通話 System.exit
.
場合に選びいただけますか否かの例外をスローする自分の電話 System.exit
, いいかどうかのエラー状態であるものが考えらつき一部のJavaコードで通話をご方法です。場合にエラーが発生した直接 main
方法、それがされることがないでしょう呼び出し側に取り扱いの例外では、五 System.exit
.そうでない場合、例外のマイクロスイッチ例外をスローする-しない RuntimeException
, るべき使用例外タイプを適切に表するエラーで発生します。書き独自のサブクラスの RuntimeException
が必要です。
他のヒント
一般的に、この状況では、おそらく電話をかけることによって、私の主な方法のすべての例外を処理します System.exit
. 。これにより、エラーコードで終了する必要性を満たしながら、例外的な条件をどこで/どのように処理するか/どのように処理するかについての柔軟性が得られます。特に、返品コードとユーザー用に生成する可能性のあるその他の出力(エラーメッセージ、スタックトレースなど)を制御できます。メインで例外をスローする(または例外を逃がす)場合、そのコントロールを失います。
要約するには、電話してください System.exit
トップレベルの例外ハンドラーでのみ:
static public void main() {
try {
runMyApp();
} catch (Exception e) {
System.exit(1);
}
}
スローされた例外がスタックトレースを印刷し、それを必要としない場合は、System.Exitを使用します。
終了すると、sytem.outでユーザーに通知できます(アプリがCommanline環境でのみ実行されていると仮定します)。
すべてのエラーをキャッチするだけで、個別のログのエラーを記録することを検討する必要があります。これにより、端末を閉じるときにスタックトレースが永久に失われないようにします。この目的のためにlog4jをご覧ください。本当に使いやすいです。
アプリ自体はsystem.exitを使用する必要があります。それは呼び出し環境(スクリプト)とのインターフェースです。もちろん、内部コンポーネントは例外を使用する必要があります。あなたがそれをまとめるとき、それは両方のheemになることができます:
Application.main(...) {
parse(args);
check(...);
try {
MyObject o = ...;
o.doMyStuff();
} catch (Exception e) {
System.err.println("Oops, something went wrong!"); // by example, or use a logging framework! // anyway in a shell app System.in/out/err IS my interface with the outworld
System.exit(ERROR_CODE);
}
System.out.println("Worked!");
}
System.exit(num)は、Shutdown JVMに加えて、Catch blockがあったとしても最終的なブロックを実行しなかったため、適切なオプションではありません。
RuntimeExceptionをスローすることは、オプションの最良のものではないかもしれません。前述のようにサブクラスができます。これは、私の意見ではアプリ固有の例外がより良いオプションになる可能性があります。 - マニッシュ
system.exit()は推奨されません。 JVMをシャットダウンします。