System.exit(num) oder wirft eine RuntimeException, main?
Ich habe eine single-threaded-app, sollte der DOS-errorlevel auf etwas nicht-null, wenn es ein problem gibt. Ist es besser, werfen einer RuntimeException, oder mit System.exit(ungleich null)? Ich brauche die Stapel-Ablaufverfolgung, und ich erwarte nicht, dass diese app erweitert werden/wiederverwendet werden. Was sind die Unterschiede zwischen diesen beiden Optionen?
InformationsquelleAutor der Frage VarV | 2010-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht eine Ausnahme werfen, es sei denn, Sie haben wirklich eine außergewöhnliche Bedingung.
System.exit(int)
ist es aus genau diesem Grund. Es verwenden.EDIT: ich glaube, ich kann deine Frage falsch verstanden. Ich dachte, Sie wurden gefragt, Wann Sie wollen, um zu beenden der JVM normal, aber signal, dass etwas nicht ganz Recht zu gehen, ob es besser ist, eine exception zu werfen oder zu verwenden
System.exit
.Allerdings, wenn das problem ist etwas, das ist bereits gekennzeichnet durch eine Java-Ausnahme, es ist in Ordnung, nur lassen Sie, die gehen nicht behandelte Ausnahme. Sie müssen nicht um die Ausnahme zu fangen und rufen
System.exit
.Wenn Sie die Wahl haben, ob Sie eine Ausnahme von Ihrem eigenen oder rufen Sie
System.exit
darüber nachzudenken, ob der Fehler ist etwas, das könnte unter Umständen behandelt werden, indem Sie einige Java-code, nennt sich Ihre Methode. Wenn der Fehler Auftritt direkt in diemain
- Methode, dann wird es vermutlich nie ein Aufrufer die Ausnahme behandelt werden, so sollte man Sie wohl nennenSystem.exit
. Ansonsten ist es im Allgemeinen am besten, um eine exception zu werfen - aber nichtRuntimeException
sollten Sie wahrscheinlich verwenden Sie eine Ausnahme geben, dass angemessen repräsentiert den Fehler, den Sie gestoßen. Schreiben Sie Ihre eigene Unterklasse vonRuntimeException
wenn nötig.InformationsquelleAutor der Antwort David Z
In der Regel in dieser situation würde ich behandeln alle Ausnahmen, die in meiner main-Methode, möglicherweise durch den Aufruf
System.exit
. Dies gibt Ihnen die Flexibilität darüber, wo/ob/wie zu handhaben außergewöhnlichen Bedingungen, während immer noch die Erfüllung Ihrer Notwendigkeit zu beenden, mit einem Fehler-code. Insbesondere, es gibt Ihnen die Kontrolle über den return-code und jede andere Ausgabe, die Sie generiert möglicherweise für den Benutzer (Fehlermeldung mit stack-trace, etc). Wenn Sie werfen eine exception in main (oder lassen eine Ausnahme zu entkommen), Sie verlieren die Kontrolle.Zusammenfassen, nennen
System.exit
nur in Ihre top-level-exception-handler:InformationsquelleAutor der Antwort Aaron Novstrup
Wird eine Ausnahme geworfen wird, drucken Sie die Stapel-Ablaufverfolgung, und wenn Sie brauchen das nicht, Sie soll die Verwendung von System.exit.
Beim beenden können Sie den Benutzer informieren, mit einem Sytem.(ich nehme an, die app läuft in einem commanline-Umgebung).
Sollten Sie überlegen, einfach zu fangen alle Fehler eine Protokollierung der Fehler in einem separaten Protokoll, das dafür sorgt der stacktrace ist nicht für immer verloren, wenn Sie schließen Sie das terminal. Werfen Sie einen Blick auf log4j für diesen Zweck, es ist wirklich einfach zu bedienen.
InformationsquelleAutor der Antwort Jes
Die APP selbst sollte System.exit. Es ist die Schnittstelle, mit der Berufung Umgebung (Skript). Eine andere interne Komponente des Kurses verwenden sollte Ausnahme. Wenn Sie es zusammen kann es sein das beide ' em:
InformationsquelleAutor der Antwort helios
System.exit(num) ist nicht eine gute option, wie der shutdown der JVM, und es nicht ausführen, wird der finally-block, wenn Sie haben, nach dem catch-block.
Wirft RuntimeException auch vielleicht nicht die beste option, können eine Unterklasse, wie bereits erwähnt, die app-spezifischen Ausnahme wäre eine bessere option meiner Meinung nach.
-Manish
InformationsquelleAutor der Antwort Manish Malhotra
System.exit() nicht empfohlen. Es Abschaltungen JVM.
InformationsquelleAutor der Antwort Harsha Hulageri