10.eloadas Flashcards
(11 cards)
KIVÉTEL ÉRTELMEZÉSE
A kivétel egy kivételes esemény, amely a program futása közben lép fel, megszakítva a normál végrehajtást.
A Java-ban a kivétel egy objektum, amely automatikusan vagy programozó által jön létre.
KIVÉTELKEZELÉS UTASÍTÁSAI
- try – védett kód (blokk) kijelölése
- throw – kivétel dobása, generálása
- catch – kivétel elkapása, a blokkban definiált utasítások végrehajtása
- finally – végül, akár volt kivétel, akár nem volt, lefut
KIVÉTELDOBÁS
A kivétel objektum dobása a throw kulcsszóval történik.
throw new ArithmeticException(“Hibás osztás”);
Ha egy metódusban hiba történik, a program létrehoz egy kivételobjektumot és átadja a futási környezetnek.
A kivételobjektum tartalmaz:
- A hiba típusát (Exception típus)
- A hibaüzenetet (String message)
- A program állapotát a hiba pillanatában (call stack)
Hívási verem (Call Stack)
A metódushívások rendezett listája.
A JVM visszafelé keres a metódusok között egy megfelelő kivételkezelőt.
Kivételkezelő
A kivételt a catch blokk kapja el.
A catch típusa illeszkednie kell a dobott kivétel típusára (vagy annak ősére).
Több catch blokk is megadható – sorrend számít!
try {
// veszélyes kód
} catch (IOException e) {
// kivételkezelés
}
Kivételtípusok
A. Ellenőrzött kivételek (Checked Exceptions)
Fordítási időben ellenőrizve, kezelni kötelező (pl. IOException).
Ha nem kezeljük, fordítási hiba történik.
B. Nem ellenőrzött kivételek (Unchecked Exceptions)
Futási időben keletkeznek, kezelni nem kötelező (pl. NullPointerException, ArrayIndexOutOfBoundsException).
C. Saját kivételek
Az Exception osztályból származtathatók:
class SajátHiba extends Exception {
public SajátHiba(String üzenet) {
super(üzenet);
}
}
A kivétel keletkezésének módjai
- Implicit – Java API hozza létre (pl. null pointer, fájlhiba)
- Explicit – programozó throw utasítással dobja
- Aszinkron – másik szálon bekövetkező kivétel
Kivételkezelés folyamata
- Kivétel keletkezik a try blokkban.
- A program megállítja a try blokk végrehajtását.
- A JVM megkeresi a megfelelő catch blokkot:
- A hívási verem (call stack) visszafelé keresi a kezelőt.
- Ha talál illeszkedő catch blokkot, végrehajtja.
- Ha nincs kezelő, a program leáll, és a hiba kiíródik.
- A finally blokk mindig lefut, akár volt hiba, akár nem.
finally blokk
Mindig lefut, kivételtől függetlenül.
Nem tartalmazhat paramétert.
Használható erőforrások lezárására (fájl, adatbázis stb.)
Fontos szabályok
✅ try blokk kötelező, catch vagy finally nélkül nem használható.
✅ catch blokkok sorrendje fontos – specifikusabb típusok legyenek előbb!
✅ finally blokk mindig lefut, még akkor is, ha return van a try-ban vagy catch-ben.
❌ Ne kapj el mindent (catch (Exception e)), csak amit tényleg kezelni tudsz!
⚠ Ellenőrzött kivételeket mindig kezelni kell (vagy try-catch, vagy throws).
Mikor érdemes kivételt használni?
✔ Várt hibák (pl. fájl nem található, érvénytelen bemenet).
✔ Erőforrás-kezelés (pl. fájl, adatbázis lezárása finally-ben).
❌ Normális programfolyamat részeként ne használj kivételt!