Middle
Milyen típusú kivétel Java-ban nem kezelhető?
sobes.tech MI
Válasz az MI-től
Hiba.
A Java három fő típusra osztja a kivételeket (Throwable):
- Ellenőrzött kivételek: Kötelező kezelést vagy deklarációt igényelnek a metódus aláírásában (
throws). - Nem ellenőrzött kivételek (Futásidő kivételek): Nem igényelnek kötelező kezelést. Általában a program logikájában lévő hibákat jelzik.
- Hibák: Súlyos problémákat jelentenek, amelyek a Java virtuális géphez vagy a rendszer erőforrásaihoz kapcsolódnak. Ezeket nem lehet alkalmazásszinten kezelni, mivel nem a kód problémái.
Error példák:
OutOfMemoryError: A Java virtuális gép nem tudott memóriát foglalni.StackOverflowError: A verem túlcsordult (túl mély rekurzió).InternalError: A Java Virtual Machine belső hibája.
Az Error kezelés try-catch-tel értelmetlen, mivel ezek a hibák olyan állapotokat jeleznek, amelyekből az alkalmazás általában nem tud sikeresen helyreállni. Ehelyett, ha Error lép fel, az alkalmazás általában leáll.
Bár technikailag írható catch (Error e), ez a kód rossz gyakorlatnak számít, és nem oldja meg a fő problémát.
try {
// Kód, ami OutOfMemoryError-t okozhat
List<Object> list = new ArrayList<>();
while (true) {
list.add(new Object());
}
} catch (OutOfMemoryError e) {
// Ez a blokk lefut, de nem tudsz helyreállni,
// mivel a rendszer nem rendelkezik elegendő memóriával.
System.err.println("Memória hiány! Az alkalmazás valószínűleg leáll.");
// A további lépések itt értelmetlenek vagy SecurityException-t okoznak
} catch (Exception e) {
// Egyéb kivételek kezelése
e.printStackTrace();
}
QA automatizálásban, ha teszt közben Error lép fel, az inkább a tesztkörnyezet problémáját, a JVM helytelen konfigurációját vagy a saját alkalmazás súlyos hibáját jelzi, amely kritikus összeomláshoz vezetett, nem pedig egy várható, kezelhető kivételhez. Ezek a szcenáriók a tesztkódon kívüli okok kivizsgálását igénylik.