web-dev-qa-db-ja.com

なぜJavaがキャッチされない例外の後に成功して終了するのですか?

Perl、Python、C++、またはTclプログラムが未処理の例外で停止すると、これらの言語ランタイムは、プロセスにゼロ以外の終了コードを登録するように注意します。 Eclipseベースのプログラムでさえ、起動中に失敗すると1を返します。ただし、標準の_Java.exe_で実行されるプログラムは、プログラムが終了値を指定してSystem.exit()を呼び出さない限り、どんなに突然終了しても、喜んでゼロを返します。 AssertionFailedErrorまたはUnsatisfiedLinkErrorでさえ、正常に終了したことを呼び出しプログラムに報告します。

もちろん、すべてのシステムにプログラムの戻りコードがあるわけではありませんが、UnixとWindowsは、子プロセスにJava.lang.Process.exitValue()を保証するのに十分重要でした。彼らはまた、親プロセスの名誉ある慣習を保証しませんか?

これは言語設計の欠陥ですか、それとも実装の欠陥ですか?それが良い考えだという議論はありますか?

23
James

Java言語仕様で期待される終了値が明示的に定義されていない場合、それはndefinedであり、これに依存しないでください。

メインメソッドでThrowableをキャッチし、System.exit(1)を自分で呼び出す必要があります。

29
user1249