Vodič za System.exit ()

1. Pregled

U ovom uputstvu ćemo pogledati što System.exit znači u Javi.

Vidjet ćemo njegove svrhe, gdje i kako. Također ćemo vidjeti koja je razlika u pozivanju s različitim statusnim kodovima.

2. Što je System.exit?

System.exit je poništiti metoda. Potreban je izlazni kôd koji prosljeđuje pozivajućoj skripti ili programu.

Izlaz s kodom od nula znači normalan izlaz:

System.exit (0);

Bilo koji cijeli broj možemo proslijediti kao argument metodi. Kôd statusa koji nije nula smatra se nenormalnim izlazom.

Pozivanje System.exit metoda prekida trenutno pokrenut JVM i izlazi iz programa. Ova se metoda ne vraća normalno.

Ovo znači to sljedeći kod nakon System.exit je zapravo nedostižana opet, sastavljač za to ne zna.

System.exit (0); System.out.println ("Ovaj redak je nedostupan");

Nije dobra ideja zatvoriti program s System.exit (0). To nam daje isti rezultat izlaska iz glavni metodu i zaustavlja izvršavanje narednih redaka, također nit koja se poziva System.exit blokira dok se JVM ne završi. Ako kuka za isključivanje preda zadatak ovoj niti, to dovodi do mrtve točke.

3. Zašto nam to treba?

Tipični slučaj upotrebe za System.exit je kada postoji abnormalno stanje i moramo odmah izaći iz programa.

Također, ako moramo prekinuti program s mjesta koje nije glavna metoda, System.exit je jedan od načina da se to postigne.

4. Kada nam treba?

Uobičajeno je da se skripta oslanja na izlazne kodove naredbi koje poziva. Ako je takva naredba Java program, tada System.exit je zgodan za slanje ovog izlaznog koda.

Na primjer, umjesto da izbacimo iznimku, možemo vratiti abnormalni izlazni kod koji se zatim može protumačiti pozivom skriptom.

Ili, možemo koristiti System.exit da pozovemo sve udice za isključivanje koje smo registrirali. Te se kuke mogu postaviti za čišćenje zadržanih resursa i siguran izlazak iz ostalih ne-demonskih niti.

5. Jednostavan primjer

U ovom primjeru pokušavamo pročitati datoteku i ako postoji, ispisujemo redak iz nje. Ako datoteka ne postoji, izlazimo iz programa s System.exit iz bloka za ulov.

isprobajte {BufferedReader br = new BufferedReader (novi FileReader ("file.txt")); System.out.println (br.readLine ()); br.close (); } catch (IOException e) {System.exit (2); } napokon {System.out.println ("Izlazak iz programa"); }

Ovdje moramo napomenuti da se napokon blok ne izvršava ako datoteka nije pronađena. Jer System.exit na catch blokovima izlazi iz JVM-a i ne dopušta konačno blok za izvršenje.

6. Odabir statusnog koda

Bilo koji cijeli broj možemo proslijediti kao statusni kod, ali opća je praksa da a System.exit sa statusnim kodom 0 je normalno, a drugi su abnormalni izlazi.

Imajte na umu da je ovo samo "dobra praksa" i nije strogo pravilo o kojem bi se sastavljač brinuo.

Također, vrijedi napomenuti kada iz naredbenog retka pozivamo Java program da se uzima u obzir statusni kôd.

U donjem primjeru, kada pokušavamo izvršiti SystemExitExample.class, ako izađe iz JVM-a pozivajući System.exit s ne-nultim statusnim kodom, tada se sljedeći odjek neće ispisati.

java SystemExitExample && echo "Neću biti ispisan"

Da bi naš program mogao komunicirati s drugim standardnim alatima, mogli bismo razmotriti slijeđenje standardnih kodova koje srodni sustavi koriste za komunikaciju.

Na primjer, UNIX statusni kodovi definiraju 128 kao standard za "nevaljani argument za izlaz". Dakle, možda bi bilo dobro koristiti ovaj kod kada nam je potreban naš statusni kôd kako bismo ga priopćili operacijskom sustavu. U suprotnom možemo slobodno odabrati svoj kod.

7. Zaključak

U ovom uputstvu razgovarali smo o tome kako System.exit djeluje kada ga treba koristiti i kako ga koristiti.

Dobra je praksa koristiti rad s iznimkama ili obične naredbe za povratak za izlazak iz programa kada radite s aplikacijskim poslužiteljima i ostalim redovnim aplikacijama. Upotreba System.exit metoda više odgovara aplikacijama temeljenim na skriptama ili tamo gdje se tumače statusni kodovi.

Na GitHubu možete provjeriti primjere iz ovog članka.