2015-02-26 1 views
8

Ich habe die folgenden Zweifel bezogen sich auf eine einfache Kommandozeilen-Java-Anwendung.Wie genau funktioniert der Java-Anwendungs-Exit-Code der main() -Methode?

So habe ich diese Kommandozeilen-Anwendung, die von einer main() Methode definiertem in einer Haupt Klasse startd ist.

Wie üblich diese main() Methode wird mit dieser Signatur definiertem:

public static void main(String[] args) { 

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

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

Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket' 

Process finished with exit code 0 

Was genau stellen die Exit-Code 0?

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

So, jetzt habe ich die folgenden 2 Zweifel:

  1. Wenn es wahr ist, warum es, wenn meine main() Methode Rückkehr Leere passiert?

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

Tnx

+2

'System.exit (1)' – Albert

+1

Bitte lesen Sie die Dokumentation der Klasse 'System', insbesondere 'exit (int) '] (http://docs.oracle.com/javase/7/docs/api /java/lang/System.html#exit%28int%29). – RealSkeptic

+1

Der Exit-Code 0 ist nur eine 0 nach Konvention für Java. In einem normalen Fall sollte ein Exit-Code ungleich 0 ein Indikator für einen Fehler sein, was nicht der Fall sein muss, wenn der Programmierer hinter dem Java-Programm diese Konvention bei der Verwendung von System.exit() nicht befolgt hat; – SomeJavaGuy

Antwort

15

Die VM verlässt, wenn

  • alle nicht-Daemon-Threads stoppen läuft oder
  • System.exit(exitCode) wird

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

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

Der Exit-Code 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.

+0

Ok, tnx. Vielleicht ist meins eine blöde Frage, aber was genau ist ein "non daemon threads"? – AndreaNobili

+2

Ein Daemon-Thread ist ein Thread, der automatisch beendet wird, wenn die letzten "normalen" Nicht-Daemon-Threads nicht mehr ausgeführt werden. Lesen Sie http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html –

3

Exit-Code des Prozesses ist, was der Prozess als Fehlercode an das Betriebssystem meldet.

Java Designer könnte machen main() Methode int zurückzukehren, so dass JVM OS als Prozess-Exit-Code diesen Wert berichten konnte.Aber sie entschieden sich dafür, main void zu machen, aber bieten API, die diesen Code mit System.exit(exitCode) aktualisieren können. 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.

3

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

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

Verwandte Themen