Gyakorlati alapok III.
A totálisan destruktív magatartás: a System.exit() metódus
Az előző, A részlegesen destruktív magatartás: a virtuális szemétgyűjtés című fejezetben ismertetett System.gc() függvény eltakarít a memóriából minden, már nem használt kódot. A metódus fő jellegzetessége, hogy hívásakor nem fut le azonnal, a metódushívás csak egy "baráti ajánlat" a Java-rendszer felé, hogy legyen szíves, ha lesz 1 kis ideje, a kódszemetet takarítsa el.
Ezzel ellentétben System.exit() függvény hívása azonnal végrehajtásra kerülő programleállást fog eredményezni.
Természetesen ez sem eszetlen módon lesz kivitelezve: a függvény teljes leállás előtt megszünteti az összes szálat (thread), bezárja a megnyitott fájlokat, valamint felszabadítja az erőforrásokat. Erre az aprólékos terminálására egyébként szükség is van, hiszen minél komplexebb egy Java-program, annál nagyobb a valószínűsége, hogy a main() metódus végére érve valami még mindig fut, amely lefoglalja magát a JVM-et is.
Következésképpen a System.exit() függvényhívás megszünteti mind a Java-alkalmazást, mind az aktuális Java-futtató környezetet (JVM).
A függvényre legtöbbször a kódban a
System.exit(0) kifejezéssel hivatkoznak. A nem 0 érték abnormális
leállást jelez, amelyet a JVM már nem tud kiértékelni, hiszen az már szintén
leállt, de az érték például egy
Windows-batch fájlban elkapható. A
System.exit() függvényhívás egyenértékű a
Runtime.getRuntime().exit(n) metódushívással.
A System.exit() függvény működésének megismeréséhez nézzünk meg egy egyszerű, futtatható Java-kódot. Egy for ciklusban az i iterátor egyre növekvő értékeit figyeljük és írjuk ki elméletileg 10-ig, de i = 5 felett a program (vele le fog állni a terminátor függvény hívása miatt:
class Main{
public static void main(String args[]){
for(int i = 1; i < 10; i++){
System.out.print(i + " ");
if(i == 5){
System.exit(0);
}
}
}
}
Végeredmény:
1 2 3 4 5