Eine Anleitung zu System.exit ()

1. Übersicht

In diesem Tutorial sehen wir uns an, was System.exit in Java bedeutet.

Wir werden sehen, wozu es verwendet wird und wie es verwendet wird. Wir werden auch sehen, was der Unterschied ist, wenn Sie es mit verschiedenen Statuscodes aufrufen.

2. Was ist System.exit ?

System.exit ist eine void- Methode. Es wird ein Exit-Code benötigt, der an das aufrufende Skript oder Programm weitergeleitet wird.

Das Beenden mit einem Code von Null bedeutet ein normales Beenden:

System.exit(0);

Wir können eine beliebige Ganzzahl als Argument an die Methode übergeben. Ein Statuscode ungleich Null wird als abnormaler Ausgang betrachtet.

Durch Aufrufen der System.exit- Methode wird die aktuell ausgeführte JVM beendet und das Programm beendet. Diese Methode wird nicht normal zurückgegeben.

Dies bedeutet, dass der nachfolgende Code nach System.exit praktisch nicht erreichbar ist und der Compiler dennoch nichts davon weiß.

System.exit(0); System.out.println("This line is unreachable");

Es ist keine gute Idee, ein Programm mit System.exit (0) herunterzufahren . Es gibt uns das gleiche Ergebnis von dem austretenden Hauptverfahren und stoppt auch die nachfolgenden Zeilen von der Ausführung, den Faden auch Aufruf System.exit blockiert , bis der JVM beendet. Wenn ein Shutdown-Hook eine Aufgabe an diesen Thread sendet, führt dies zu einem Deadlock.

3. Warum brauchen wir es?

Der typische Anwendungsfall für System.exit ist, wenn ein abnormaler Zustand vorliegt und wir das Programm sofort beenden müssen.

Wenn wir das Programm an einem anderen Ort als der Hauptmethode beenden müssen, ist System.exit eine Möglichkeit, dies zu erreichen.

4. Wann brauchen wir es?

Es ist üblich, dass sich ein Skript auf die Exit-Codes der von ihm aufgerufenen Befehle stützt. Wenn ein solcher Befehl eine Java-Anwendung ist, ist System.exit praktisch, um diesen Exit-Code zu senden.

Anstatt eine Ausnahme auszulösen, können wir beispielsweise einen abnormalen Exit-Code zurückgeben, der dann vom aufrufenden Skript interpretiert werden kann.

Oder wir können System.exit verwenden , um alle von uns registrierten Shutdown-Hooks aufzurufen. Diese Hooks können festgelegt werden, um die gehaltenen Ressourcen zu bereinigen und andere Nicht-Daemon-Threads sicher zu beenden.

5. Ein einfaches Beispiel

In diesem Beispiel versuchen wir, eine Datei zu lesen, und wenn sie vorhanden ist, drucken wir eine Zeile daraus. Wenn die Datei nicht existiert, beenden wir das Programm mit System.exit aus dem catch-Block.

try { BufferedReader br = new BufferedReader(new FileReader("file.txt")); System.out.println(br.readLine()); br.close(); } catch (IOException e) { System.exit(2); } finally { System.out.println("Exiting the program"); }

Hierbei ist zu beachten, dass der finally-Block nicht ausgeführt wird, wenn die Datei nicht gefunden wird. Weil die System.exit auf den catch-Blöcken die JVM beendet und die Ausführung des finally- Blocks nicht zulässt .

6. Auswählen eines Statuscodes

Wir können jede Ganzzahl als Statuscode übergeben, aber die allgemeine Praxis ist, dass ein System.exit mit dem Statuscode 0 normal ist und andere abnormale Exits sind.

Beachten Sie, dass dies nur eine „gute Praxis“ ist und keine strenge Regel ist, die dem Compiler wichtig ist.

Auch es ist erwähnenswert , wenn wir ein Java - Programm von der Kommandozeile aufrufen , dass der Statuscode berücksichtigt wird.

Wenn wir im folgenden Beispiel versuchen, SystemExitExample.class auszuführen , wird das folgende Echo nicht gedruckt , wenn die JVM durch Aufrufen von System.exit mit einem Statuscode ungleich Null beendet wird.

java SystemExitExample && echo "I will not be printed"

Um unser Programm in die Lage zu versetzen, mit anderen Standardwerkzeugen zu kommunizieren, sollten wir die Standardcodes befolgen, die die zugehörigen Systeme für die Kommunikation verwenden.

Beispielsweise definieren UNIX-Statuscodes 128 als Standard für "ungültiges Argument zum Beenden". Daher ist es möglicherweise eine gute Idee, diesen Code zu verwenden, wenn unser Statuscode an das Betriebssystem übermittelt werden muss. Ansonsten können wir unseren Code frei wählen.

7. Fazit

In diesem Tutorial haben wir erläutert, wie System.exit funktioniert und wann es verwendet wird.

Es wird empfohlen, Ausnahmebehandlungen oder einfache Rückgabeanweisungen zu verwenden, um ein Programm zu beenden, wenn Sie mit Anwendungsservern und anderen regulären Anwendungen arbeiten. Die Verwendung der System.exit- Methode eignet sich besser für skriptbasierte Anwendungen oder überall dort, wo die Statuscodes interpretiert werden.

Sie können die Beispiele in diesem Artikel auf GitHub nachlesen.