Wie funktioniert der Java-Anwendungs-Exit-Code der main () -Methode?

8

Ich habe folgende Zweifel bezüglich einer einfachen Kommandozeilen-Java-Anwendung.

Also habe ich diese Befehlszeilenanwendung, die von einer main () -Methode gestartet wird, die in einer Main -Klasse definiert ist.

Wie üblich ist diese Methode main () mit dieser Signatur definiert:

%Vor%

Also ist der Rückgabetyp void . Es sollte also bedeuten, dass es keinen Wert zurückgibt.

Aber warum, wenn seine Ausführung korrekt beendet wird, erhalte ich diese Nachricht in die IntelliJ-Konsole?

%Vor%

Was genau repräsentiert den Exit-Code 0 ?

Ich denke, dass es bedeutet, dass das Programm seine Ausführung korrekt abgeschlossen hat, ohne Fehler zu verursachen.

So, jetzt habe ich die folgenden zwei Zweifel:

  1. Wenn es wahr ist, warum passiert es, wenn meine Methode main () void zurückgibt?

  2. Wie kann ich einen anderen Exit-Code zurückgeben, wenn meine Anwendung mit einem Fehler endet? Existiert ein Standard-Exit-Code-Wert, um mit Fehlern zu enden?

Tnx

    
AndreaNobili 26.02.2015, 09:10
quelle

3 Antworten

15

Die VM wird beendet, wenn

angezeigt wird
  • alle Nicht-Daemon-Threads werden nicht mehr ausgeführt oder
  • System.exit(exitCode) heißt

Im ersten Fall ist der Exit-Code 0. Im zweiten Fall ist es der Exit-Code, der an die Methode exit() übergeben wird.

Vergessen Sie nicht, dass das Programm auch dann weiterläuft, wenn Ihre main () -Methode zurückkehrt, bis kein Nicht-Daemon-Thread mehr läuft. Und jeder Thread, der in der VM ausgeführt wird, kann explizit beenden.

Der Beendigungscode 0 bedeutet, dass alles wie erwartet abgelaufen ist. Sie können wählen, einen anderen Exit-Code zu verwenden, um eine außergewöhnliche Bedingung für die Umgebung zu signalisieren.

    
JB Nizet 26.02.2015, 09:14
quelle
3

Der Beendigungscode des Prozesses gibt an, wie der Prozess als Fehlercode an das Betriebssystem gemeldet wird.

Java-Designer konnten die main() -Methode verwenden, um int zurückzugeben, so dass JVM diesen Wert als Prozessbeendigungscode an OS melden konnte. Aber sie entschieden sich dafür, main void zu machen, aber bieten eine API, die diesen Code mit System.exit(exitCode) aktualisieren kann. Der Vorteil dieser Lösung ist, dass das Programm entscheiden kann, an jedem Punkt und in jedem Thread zu beenden, nicht nur in der Hauptmethode und im Hauptthread.

    
AlexR 26.02.2015 09:17
quelle
3

Ein Exit-Code von 0 bedeutet, dass er normal abgeschlossen wurde, das ist Standard für alle Prozesse, nicht nur für Java. Der Wert stammt nicht von der Hauptmethode (er ist ungültig), sondern von der JVM selbst.

Ein anderer Wert kann spezifiziert werden, z.B. System.exit(1) , um eine Fehlerbedingung anzuzeigen, und das Programm stoppt.

    
NickJ 26.02.2015 09:18
quelle

Tags und Links