2012-12-26 10 views
5

Javaでは、System.exit(int)を使用してプログラムを終了します。 Cの「終了値」の理由は、終了値がプログラムのエラーをチェックするために使用されたためです。しかしJavaでは、例外がスローされることによってエラーが反映されるため、簡単に処理できます。なぜJavaでは終了値を持つのでしょうか?Javaで終了コードを使用するのはなぜですか?

+8

あります。 –

+5

なぜすべてのdownvotes? – arshajii

+0

可能性重複http://stackoverflow.com/q/457338/668970 – developer

答えて

13

終了値は呼び出し元のプログラムに返されます。シェル。例外は外部プログラムによって捕らえられません。

BTW例外をスローすると、そのスレッドによってキャッチされるか、そのスレッドが終了したときに、finallyブロックが引き続きそのスレッドに対して呼び出されます。 System.exit()を呼び出すと、すべてのスレッドが直ちに停止し、最後にブロックが呼び出されません。

0

終了値が呼び出し元に返され、プログラムの正常終了または不完全終了を通知します。呼び出し元は、例外を捕捉してそれに応じて処理することができない場合があります。

たとえば、 0終了値は正常終了を意味し、0以外の戻り値は実行中の何らかのエラーを意味する。

また、System.exit()は、アプリケーション内のすべてのスレッドをその時点で停止させます。

3

同じ理由で。

終了コードは、デバッグおよび処理の目的で、プログラムの外部のパーティーおよびアプリケーションによって排他的に使用されます。スーパーアプリケーションは、スタックトレースを解析しようとするよりも、戻りコードを確実に処理することができます。

また、エンドユーザー用のアプリケーションを作成する場合は、スタックトレース情報の束を投稿するよりも、アプリから正常に終了する方がよいでしょう。その理由のいくつかは、 2つのスタックトレースは、プログラムが基本的に構造化されている方法(潜在的な攻撃者にシステムに関する知識を与える)に関する機密情報を機密情報として明らかにします。

現実的な例として、ジョブの終了コードを使用するJavaバッチプログラムを作成していました。ユーザーは、終了コードが「0」であるかどうかに基づいてジョブが正常に実行されたかどうかを確認できます。それ以外のものであれば、テクニカルサポートに連絡して、終了コードの追加情報を入手することができ、ヘルプデスクは、その終了コードに基づいて必要な情報をすべて手に入れて手伝ってくれます。それは技術的でないエンドユーザーに "オッケー、どういう例外がありますか?"と尋ねることよりもはるかにうまく機能します。

0

簡潔に言えば、終了コードは、Javaプログラムの実行中に例外を検出したユーザーに簡略化した信号です。ほとんどのユーザーは例外のスタックトレースデータを理解していないと仮定しているので、これらの単純で非ゼロのカスタムコードは何かが間違っていることを通知し、ベンダーに報告する必要があります。したがって、ベンダーはコードを取得し、そのコードに関連付けられたスタックトレースを認識し、システムを修復しようとします。これは、ユーザーが大量のスタックトレースを読み込んだり報告したりする必要がないように、プログラマによって提供される抽象化です。ここでの非常に良い例は、SQLExceptionクラスのgetErrorCode()メソッドです。このメソッドは、クライアントマシン上で実行されている現在のJVMも閉じます。これは、これにより、JVMにあるすべてのスレッドが終了することを意味します。このメソッドは、Java.lang.Runtimeクラスのexitメソッドを呼び出します。この方法のドキュメントに進むと、仮想マシンがどのようにシャットダウンされているかがわかります。

これは、終了値は、オペレーティングシステムに指定されたリンク

http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29
関連する問題