Sprievodca po System.exit ()

1. Prehľad

V tejto príručke sa pozrieme na to, čo System.exit znamená v Jave.

Uvidíme, aké sú jeho účely, kde a ako ich používať. Uvidíme tiež, aký je rozdiel v jeho vyvolaní pomocou rôznych stavových kódov.

2. Čo je System.exit?

System.exit je a neplatný metóda. Trvá výstupný kód, ktorý odovzdá volajúcemu skriptu alebo programu.

Končí sa s kódom nula znamená normálny východ:

System.exit (0);

Metóde môžeme vložiť celé číslo ako argument. Nenulový stavový kód sa považuje za abnormálny výstup.

Volá sa System.exit metóda ukončí práve bežiaci JVM a ukončí program. Táto metóda sa nevracia normálne.

To znamená, že nasledujúci kód po System.exit je skutočne nedosiahnuteľnýa napriek tomu o tom kompilátor nevie.

System.exit (0); System.out.println ("Tento riadok je nedostupný");

Nie je dobrý nápad ukončiť program pomocou System.exit (0). Prináša nám rovnaký výsledok výstupu z hlavný metóda a tiež zastaví vykonávanie ďalších riadkov, aj vyvolanie vlákna System.exit blokuje, kým sa JVM neukončí. Ak vypínací hák odovzdá úlohu tomuto vláknu, vedie to k zablokovaniu.

3. Prečo to potrebujeme?

Typický prípad použitia pre System.exit je, keď nastane abnormálny stav a musíme program okamžite ukončiť.

Tiež, ak musíme program ukončiť z iného miesta, ako je hlavná metóda, System.exit je jedným zo spôsobov, ako to dosiahnuť.

4. Kedy to potrebujeme?

Je bežné, že sa skript spolieha na výstupné kódy príkazov, ktoré vyvoláva. Ak je takýmto príkazom aplikácia Java, potom System.exit je užitočné na odoslanie tohto výstupného kódu.

Napríklad namiesto zrušenia výnimky môžeme vrátiť abnormálny výstupný kód, ktorý je potom možné interpretovať volajúcim skriptom.

Alebo môžeme použiť System.exit vyvolať všetky vypínacie háky, ktoré sme zaregistrovali. Tieto háky je možné nastaviť na vyčistenie zadržaných prostriedkov a bezpečný výstup z iných vlákien, ktoré nie sú démonmi.

5. Jednoduchý príklad

V tomto príklade sa pokúsime načítať súbor a ak existuje, vytlačíme z neho riadok. Ak súbor neexistuje, ukončíme program pomocou System.exit z úlovkového bloku.

skúsiť {BufferedReader br = nový BufferedReader (nový FileReader ("file.txt")); System.out.println (br.readLine ()); br.close (); } catch (IOException e) {System.exit (2); } nakoniec {System.out.println ("Ukončenie programu"); }

Tu musíme poznamenať, že blok konečne sa nespustí, ak sa súbor nenájde. Pretože System.exit na blokoch úlovkov opustí JVM a neumožňuje konečne blok vykonať.

6. Výber stavového kódu

Môžeme odovzdať akékoľvek celé číslo ako stavový kód, ale bežná prax je taká, že a System.exit so stavovým kódom 0 je normálny a iné sú abnormálne východy.

Upozorňujeme, že ide iba o „dobrú prax“ a nejde o striktné pravidlo, o ktoré by sa kompilátor zaujímal.

Tiež stojí za zmienku, keď vyvoláme program Java z príkazového riadku, že sa berie do úvahy stavový kód.

V nasledujúcom príklade, keď sa pokúšame vykonať SystemExitExample.class, ak opustí JVM zavolaním na System.exit s nenulovým stavovým kódom sa nasledujúca ozvena nevytlačí.

java SystemExitExample && echo "Nebudem tlačený"

Aby bol náš program schopný komunikovať s inými štandardnými nástrojmi, mohli by sme zvážiť dodržiavanie štandardných kódov, ktoré príslušné systémy používajú na komunikáciu.

Napríklad kódy stavu UNIX definujú 128 ako štandard pre „neplatný argument na ukončenie“. Môže byť preto dobré tento kód použiť, keď potrebujeme, aby sa náš stavový kód prenášal do operačného systému. V opačnom prípade si môžeme zvoliť náš kód.

7. Záver

V tomto tutoriáli sme diskutovali o tom, ako System.exit funguje, kedy a ako ju používať.

Pri práci s aplikačnými servermi a inými bežnými aplikáciami je dobrým zvykom na ukončenie programu používať spracovanie výnimiek alebo príkazy jednoduchého návratu. Využitie System.exit metóda vyhovuje viac skriptovým aplikáciám alebo všade tam, kde sa stavové kódy interpretujú.

Príklady uvedené v tomto článku si môžete pozrieť na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found