In Java verwenden wir System.exit(int)
, um das Programm zu beenden. Der Grund für einen "Exit-Wert" in C war, dass der Exit-Wert verwendet wurde, um nach Fehlern in einem Programm zu suchen. In Java werden Fehler jedoch durch das Auslösen einer Exception widergespiegelt, sodass sie problemlos verarbeitet werden können. Warum haben wir also überhaupt Ausgangswerte in Java?Warum haben wir Exit-Codes in Java?
Antwort
Exit-Werte werden an das aufrufende Programm zurückgegeben, z.B. die Muschel. Eine Ausnahme kann von einem externen Programm nicht abgefangen werden.
BTW Wenn Sie eine Exception werfen, wird sie von diesem Thread abgefangen oder der Thread stirbt, die finally
Blöcke werden immer noch für diesen Thread aufgerufen. Wenn Sie System.exit() aufrufen, werden alle Threads sofort beendet und schließlich werden Blöcke nicht aufgerufen.
Exit-Werte werden an die Anrufer zurückgegeben, um den erfolgreichen oder erfolgreichen Abschluss des Programms zu signalisieren. Der Aufrufer kann die Ausnahme möglicherweise nicht abfangen und entsprechend behandeln.
Für z. Der 0-Ausgangswert bedeutet eine erfolgreiche Beendigung, während der von Null verschiedene Rückgabewert einen Fehler bei der Ausführung bedeutet.
Auch System.exit() wird alle Threads in der Anwendung an diesem Punkt selbst stoppen.
Aus dem gleichen Grund.
Exit-Codes werden ausschließlich von Parteien und Anwendungen außerhalb des Programms zu Debugging- und Handhabungszwecken verwendet. Eine Super-Anwendung kann definitiv einen Return-Code verarbeiten, anstatt zu versuchen, einen Stack-Trace zu analysieren.
Auch wenn Sie eine Anwendung für einen Endbenutzer erstellen, würden Sie lieber aus Ihrer App austreten, als eine Reihe von Stack-Trace-Informationen zu veröffentlichen, aus mehreren Gründen: Erstens werden Sie sie nur erschrecken Mit einer Menge verrückter Techno-Kauderwelsch, und zwei, Stack-Spuren zeigen oft sensible und vertrauliche Informationen über die Art, wie das Programm grundlegend strukturiert ist (ein potenzieller Angreifer mehr Wissen über das System zu geben).
Für ein reales Beispiel arbeitete ich an einem Java Batch-Programm, das Exit-Codes für seine Jobs verwendete. Ein Benutzer konnte basierend darauf, ob der Beendigungscode "0" war, sehen, ob der Job erfolgreich ausgeführt wurde oder nicht. Wenn es etwas anderes wäre, könnten sie sich an den technischen Support wenden, der mit den zusätzlichen Informationen des Exit-Codes bewaffnet ist, und der Helpdesk würde alle notwendigen Informationen basierend auf diesem Exit-Code haben, um ihnen zu helfen. Es funktioniert viel besser als der Versuch, einen nichttechnischen Endbenutzer zu fragen: "Okay, welche Ausnahme bekommst du?"
Kurz gesagt, Exit-Codes sind vereinfachte Signale für den Benutzer, der beim Ausführen eines Java-Programms auf eine Ausnahme stößt. Da wir davon ausgehen, dass die meisten Benutzer Stack-Trace-Daten einer Ausnahme nicht verstehen, wird ihnen dieser einfache benutzerdefinierte Code, der keine Nullen enthält, mitteilen, dass etwas nicht in Ordnung ist, und dies sollte dem Anbieter gemeldet werden. Der Hersteller erhält den Code, und er kennt die Stack-Ablaufverfolgung, die diesem Code zugeordnet ist, und versucht, das System zu reparieren. Dies ist eine Abstraktion, die von den Programmierern bereitgestellt wird, so dass Benutzer keine umfangreichen Stapelverfolgungen lesen und melden müssen. Eine sehr gute Analogie ist hier die Methode getErrorCode() in der SQLException-Klasse. Diese Methode schließt auch die aktuelle JVM, die auf dem Clientcomputer ausgeführt wird. Dies bedeutet, dass damit alle Threads beendet werden, die sich in der JVM befinden. Diese Methode ruft die Exit-Methode in der Klasse Java.lang.Runtime auf. Wenn Sie die Dokumentation dieser Methode aufrufen, werden Sie verstehen, wie die virtuelle Maschine heruntergefahren wird.
Dies ist der Link http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29
Der Austrittswert für das Betriebssystem festgelegt ist. –
Warum alle downvotes? – arshajii
possibility duplicate http://stackoverflow.com/q/457338/668970 – developer