Sobes.tech
Middle

Koks Java išimtis negali būti apdorota?

sobes.tech AI

Atsakymas iš AI

Klaida.

Java skirsto išimtis (Throwable) į tris pagrindinius tipus:

  1. Patikrintos išimtys (Checked Exceptions): Reikalauja privalomo apdorojimo arba deklaravimo metodo paraše (throws).
  2. Nepatikrintos išimtys (Unchecked Exceptions, Runtime Exceptions): Nereikalauja privalomo apdorojimo. Paprastai nurodo programos logikos klaidas.
  3. Klaidos (Errors): Atstovauja rimtas problemas, susijusias su Java virtualiąja mašina arba sistemos ištekliais. Jų neįmanoma apdoroti programos lygyje, nes jie nėra pačios kodo problemos.

Error pavyzdžiai:

  • OutOfMemoryError: Java virtualioji mašina nesugebėjo paskirti atminties.
  • StackOverflowError: Rinkinio perteklius (per gilus rekursija).
  • InternalError: Java Virtual Machine vidinė klaida.

Error apdorojimas naudojant try-catch nėra prasmės, nes šios klaidos rodo būsenas, iš kurių programa paprastai negali sėkmingai atsigauti. Vietoje to, Error atsiradus, programa dažniausiai baigia darbą.

Techniniu požiūriu galima parašyti catch (Error e), tačiau toks kodas laikomas bloga praktika ir neišsprendžia pagrindinės problemos.

try {
    // Kodas, kuris gali sukelti OutOfMemoryError
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Šis blokas įvykdys, bet jūs negalėsite atsigauti,
    // nes sistema neturi pakankamai atminties:
    System.err.println("Out of memory! Application will likely terminate.");
    // Tolimesni veiksmai čia beprasmiški arba sukels SecurityException
} catch (Exception e) {
    // Kitų išimčių apdorojimas
    e.printStackTrace();
}

QA automatizacijoje, jei testavimo metu įvyksta Error, tai dažniausiai rodo problemą su testavimo aplinka, JVM konfigūracija arba rimtą programos defektą, kuris sukėlė kritinį gedimą, o ne laukiama apdorojama išimtis. Tokie scenarijai reikalauja šaknies priežasties tyrimo už testavimo kodo ribų.