Ez az egész exceptionosdi nagyon praktikus lesz a Kocsma dologhoz! Eddig ha valaki kidőlt, durván megállítottuk a programot. Még azt sem tudtuk, hogy melyik italnál dőlt ki, mert mindem csak úgy hopp, megállt.
Most ahelyett, hogy kiírogatnánk bármit, egyszerűen dobjunk egy exceptiont, ha túl sokat ivott egy Ember:
public class Ember {
double fogyasztottAlkohol=0;
double alkoholTures=1;
String nev;
double ivottMennyiseg=0;
Ember(String nev,double alkoholTures) {
this.nev=nev;
this.alkoholTures=alkoholTures;
}
void igyal(Innivalo innivalo) {
fogyasztottAlkohol+=innivalo.felszolgaltMeret*innivalo.alkoholTartalomSzazalek/100;
if (fogyasztottAlkohol>alkoholTures) {
// ez itt az exception
throw new RuntimeException("Jajj, ez sok volt! "+nev+" kidolt!");
}
ivottMennyiseg+=innivalo.felszolgaltMeret;
if (ivottMennyiseg>10) { // ez akkor 1 liter, mert deciben számolunk
// ez itt az exception
throw new RuntimeException(nev+" most feladta, mert szünetre van szüksége!");
}
}
}
Na futtassuk le a kocsma szimulációt, és lám:
Mivel senki nem kapta el az exception-t, ezért a program megáll, és az exception szövege kiíródik a konzolra.
A programunk úgy futott, hogy a Kocsma osztályból egy Ember példány (jack) meghívta az igyal() metódust, aminek a belsejében dobtuk az exception-t.
A java mindezt a folyamatot kiírja az exception alá, így lehet követni, hogy honnan jutott el a program addig, hogy ilyen hibát dobjon. Ezt a listát úgy nevezik, hogy exception stack. (Magyarul "kivétel verem" - jajj, magyarul senki sem fogja megérteni, angolul meg a többmillió programozó ugyanígy hívja!)
A kék részek tartalmazzák a programrész nevét, és a sorszámát. Ha rákattintasz, a szerkesztő arra a sorra ugrik, ami a listában van. Például a legutolsó Kocsma.java:13-ra kattintva a Kocsma 13-as sorára megy, ami az utolsó pálesz elfogyasztásáról szól, ami már túl soknak bizonyult.
Azt is látod, hogy az exception utáni rész, a többi ivás már nem futott le, így látod, hogy Jack 2 sört, Jane 1 páleszt már megivott, és Jack következő pálinkája volt az, ami már szünetet követelt.
Persze, ehhez látnod kell a program kódját... A következő részben ezt kissé kiokosítjuk, hogy ha bárki kidőlt, pontosan mutassa meg a program, hogy ki mit ivott és ki hol tart a versenyben.