Beenden eines Java-Programms

79

Ich habe Möglichkeiten gefunden, meine Java-Programme zu beenden (herunterzufahren oder zu stoppen). Ich habe zwei Lösungen dafür gefunden.

  1. mit return;
    Wenn ich meine Programmausführung beenden oder beenden möchte, füge ich dies hinzu.

  2. using System.exit () ;
    Manchmal habe ich es benutzt. Ich las über Sytem.exit () von dieser Frage .

Also weiß ich ein wenig über beide. Aber ich bin immer noch verwirrt darüber, wie sie tatsächlich funktionieren. Bitte überprüfen Sie die folgenden Codes ...

public class Testing {

public static void main(String... str) {
    System.out.println(1);
    System.exit(0);
    System.out.println(2);
    return;
 }
}

Ich bin sicher, dass 2 nicht erscheinen wird. Ich würde gerne wissen, warum return;oder andere Codes unter die Aussage von schreiben können System.exit(0);und wofür die eigentliche Definition war return;( weil es für mich seltsam ist, returnkeine Variablen oder Werte zu haben ).

Katastrophe
quelle

Antworten:

100

Durch Aufrufen System.exit(0)(oder eines anderen Werts) wird die virtuelle Java-Maschine beendet und der aktuelle Prozess beendet. Der Parameter, den Sie übergeben, ist der Rückgabewert, den der javaProzess an das Betriebssystem zurückgibt. Sie können diesen Aufruf von überall in Ihrem Programm ausführen - und das Ergebnis ist immer das gleiche - JVM wird beendet. Da dies lediglich eine statische Methode in der SystemKlasse aufruft , weiß der Compiler nicht, was er tun wird - und beschwert sich daher nicht über nicht erreichbaren Code.

returnAnweisung bricht einfach die Ausführung der aktuellen Methode ab. Es bedeutet wörtlich, das Steuerelement an die aufrufende Methode zurückzugeben . Wenn die Methode als void(wie in Ihrem Beispiel) deklariert ist , müssen Sie keinen Wert angeben, da Sie zurückgeben müssen void. Wenn die Methode für die Rückgabe eines bestimmten Typs deklariert ist, müssen Sie den zurückzugebenden Wert angeben - und dieser Wert muss vom angegebenen Typ sein.

returnwürde dazu führen, dass das Programm nur beendet wird, wenn es sich innerhalb der mainMethode der auszuführenden Hauptklasse befindet. Wenn Sie versuchen, Code danach einzufügen, beschwert sich der Compiler über nicht erreichbaren Code, zum Beispiel:

public static void main(String... str) {
    System.out.println(1);
    return;
    System.out.println(2);
    System.exit(0);
}

wird mit den meisten Compilern nicht kompiliert - ein unreachable codeFehler, der auf den zweiten System.out.printlnAufruf verweist .

Aleks G.
quelle
14
  1. System.exit () ist eine Methode, mit der JVM beendet wird.
  2. return gibt das Steuerelement nur an die aufrufende Funktion zurück.
  3. return 8 gibt die Steuerung und den Wert 8 an die aufrufende Methode zurück.
prady00
quelle
11

Weil System.exit()ist nur eine andere Methode für den Compiler. Es liest nicht weiter und stellt fest, dass das gesamte Programm an diesem Punkt beendet wird (die JVM wird beendet). Ihr Betriebssystem oder Ihre Shell kann die Ganzzahl lesen, die in der System.exit()Methode zurückgegeben wird. Es ist Standard für 0"Programm beenden und alles ging in Ordnung" und jeder andere Wert, um einen Fehler zu melden, bedeutet. Es ist Sache des Entwicklers, diese Rückgabewerte für alle Benutzer zu dokumentieren.

returnAndererseits ist es ein reserviertes Schlüsselwort, das der Compiler gut kennt. returnGibt einen Wert zurück und beendet den Lauf der aktuellen Funktion, wobei der Stapel wieder zu der Funktion verschoben wird, die ihn aufgerufen hat (falls vorhanden). In Ihrem obigen Code wird zurückgegeben, voidda Sie nichts zur Rückgabe angegeben haben.

unteilbar
quelle
2
Kommt es wirklich zurück null? Ist es nichts so nichtig? Sie können nulldie Methode mit dem Rückgabetyp as nicht zurückgeben void.
Keerthivasan
Sie haben Recht, ich werde meine Antwort ändern. Vielen Dank, dass Sie auf den Fehler hingewiesen haben.
unteilbar
7

System.exit () beendet die JVM. Nichts nachdem System.exit () ausgeführt wurde. Return wird im Allgemeinen zum Beenden einer Methode verwendet. Wenn der Rückgabetyp ungültig ist, können Sie return verwenden. Aber ich denke nicht, dass es eine gute Praxis ist, dies in der Hauptmethode zu tun. Sie müssen nichts tun, um ein Programm zu beenden, es sei denn, eine Endlosschleife oder ein seltsamer anderer Ausführungsfluss.

Karura91
quelle
6

Also kehre zurück; Beendet Ihr Java-Programm nicht wirklich , sondern nur Ihre Java-Funktion (void) . Da in Ihrem Fall die Funktion die Hauptfunktion Ihrer Anwendung ist, geben Sie return zurück. beendet auch die Anwendung. Aber die Rückkehr; in Ihrem Beispiel ist nutzlos, da die Funktion ohnehin direkt nach dieser Rückgabe beendet wird ...

Das System.exit () beendet Ihr Programm vollständig und schließt jedes geöffnete Fenster.

ReeCube
quelle
4

Was kommt zurück? bedeuten?

return;bedeutet wirklich, dass es nichts zurückgibt void. Das ist es.

warum zurückkehren; oder andere Codes können unter die Anweisung von System.exit (0) schreiben;

Dies ist zulässig, da der Compiler nicht weiß, dass der Aufruf System.exit(0)das beendet JVM. Der Compiler gibt nur eine Warnung aus - unnötige return-Anweisung

Keerthivasan
quelle
4
  • Nun, zuerst wird System.exit (0) verwendet, um das Programm zu beenden, und Anweisungen darunter sind nicht korrekt, obwohl der Compiler keine Fehler auslöst.
  • return;In einer Methode vom Typ void return wird eine Ebene verwendet, um die Ausführungssteuerung an die übergeordnete Methode zurückzugeben.
anirudh
quelle
Das ist wirklich seltsam. Ich hätte erwartet, dass der Compiler einen Fehler "Nicht erreichbarer Code" auslöst.
user3932000
Der Compiler weiß nicht, was System.exit (0) tut (und sollte auch keine solche Annahme treffen, da Sie technisch etwas ClassLoader-Magie ausführen könnten, um eine andere Implementierung von System.exit () zu laden, die nicht zum Beenden führt ),
David Liu
Ja, ich denke du hast recht. Vielleicht würde eine Warnung Sinn machen.
Anirudh