Een gids voor System.exit ()

1. Overzicht

In deze tutorial zullen we bekijken wat System.exit betekent in Java.

We zullen zien wat het doel is, waar het te gebruiken is en hoe het te gebruiken. We zullen ook zien wat het verschil is om het aan te roepen met verschillende statuscodes.

2. Wat is System.exit?

System.exit is een leegte methode. Er is een exitcode voor nodig, die het doorgeeft aan het aanroepende script of programma.

Afsluiten met een code van nul betekent een normale uitgang:

System.exit (0);

We kunnen elk geheel getal als argument aan de methode doorgeven. Een statuscode anders dan nul wordt beschouwd als een abnormale exit.

Bellen met het System.exit methode beëindigt de momenteel draaiende JVM en verlaat het programma. Deze methode keert niet normaal terug.

Dit betekent dat de daaropvolgende code na de System.exit is effectief onbereikbaaren toch weet de compiler er niets van.

System.exit (0); System.out.println ("Deze lijn is onbereikbaar");

Het is geen goed idee om een ​​programma af te sluiten met System.exit (0). Het geeft ons hetzelfde resultaat als het verlaten van de hoofd methode en stopt ook de uitvoering van de volgende regels, ook de thread die aanroept System.exit blokkeert totdat de JVM wordt beëindigd. Als een shutdown hook een taak onderwerpt aan deze thread, leidt dit tot een impasse.

3. Waarom hebben we het nodig?

De typische use-case voor System.exit is wanneer er een abnormale toestand is en we het programma onmiddellijk moeten verlaten.

Ook als we het programma moeten beëindigen vanaf een andere plaats dan de hoofdmethode, System.exit is een manier om dit te bereiken.

4. Wanneer hebben we het nodig?

Het is normaal dat een script vertrouwt op de exitcodes van de opdrachten die het aanroept. Als zo'n commando een Java-applicatie is, dan System.exit is handig voor het versturen van deze exitcode.

In plaats van een uitzondering te genereren, kunnen we bijvoorbeeld een abnormale exitcode retourneren die vervolgens kan worden geïnterpreteerd door het aanroepende script.

Of we kunnen gebruiken System.exit om eventuele shutdown-hooks aan te roepen die we hebben geregistreerd. Deze hooks kunnen worden ingesteld om de vastgehouden bronnen op te schonen en veilig af te sluiten van andere niet-daemon-threads.

5. Een eenvoudig voorbeeld

In dit voorbeeld proberen we een bestand te lezen en als het bestaat, drukken we er een regel uit af. Als het bestand niet bestaat, verlaten we het programma met System.exit van het vangblok.

probeer {BufferedReader br = nieuwe BufferedReader (nieuwe FileReader ("file.txt")); System.out.println (br.readLine ()); br.close (); } catch (IOException e) {System.exit (2); } ten slotte {System.out.println ("Het programma afsluiten"); }

Hier moeten we opmerken dat het laatste blok niet wordt uitgevoerd als het bestand niet wordt gevonden. Omdat de System.exit op de catch-blokken verlaat de JVM en staat de Tenslotte blok om uit te voeren.

6. Een statuscode kiezen

We kunnen elk geheel getal als statuscode doorgeven, maar de algemene praktijk is dat a System.exit met statuscode 0 is normaal en andere zijn abnormale uitgangen.

Merk op dat dit slechts een "goede gewoonte" is en geen strikte regel waar de compiler om geeft.

Ook, Het is vermeldenswaard dat wanneer we een Java-programma starten vanaf de opdrachtregel, rekening wordt gehouden met de statuscode.

In het onderstaande voorbeeld, wanneer we proberen uit te voeren SystemExitExample.class, als het de JVM verlaat door de System.exit met een statuscode die niet nul is, wordt de volgende echo niet afgedrukt.

java SystemExitExample && echo "Ik zal niet worden afgedrukt"

Om ons programma in staat te stellen te communiceren met andere standaardtools, kunnen we overwegen om de standaardcodes te volgen die de gerelateerde systemen gebruiken om te communiceren.

UNIX-statuscodes definiëren bijvoorbeeld 128 als de standaard voor "ongeldig argument om af te sluiten". Het kan dus een goed idee zijn om deze code te gebruiken wanneer we onze statuscode nodig hebben om te worden gecommuniceerd naar het besturingssysteem. Anders zijn we vrij om onze code te kiezen.

7. Conclusie

In deze tutorial hebben we besproken hoe System.exit werkt wanneer het te gebruiken en hoe het te gebruiken.

Het is een goede gewoonte om de afhandeling van uitzonderingen of gewone retourinstructies te gebruiken om een ​​programma af te sluiten wanneer u met applicatieservers en andere reguliere applicaties werkt. Gebruik van System.exit methode is beter geschikt voor script-gebaseerde applicaties of overal waar de statuscodes worden geïnterpreteerd.

Je kunt de voorbeelden in dit artikel bekijken op GitHub.