Sobes.tech
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):

  1. Ellenőrzött kivételek: Kötelező kezelést vagy deklarációt igényelnek a metódus aláírásában (throws).
  2. 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.
  3. 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.