Sobes.tech
Middle

Koji tip izuzetka u Javi nije moguće obraditi?

sobes.tech АИ

Одговор од АИ

Greška.

Java dijeli izuzetke (Throwable) na tri glavna tipa:

  1. Proverene izuzetke: Zahtevaju obavezno rukovanje ili deklaraciju u potpisu metode (throws).
  2. Neproverene izuzetke (Runtime Exceptions): Ne zahtevaju obavezno rukovanje. Obično ukazuju na greške u logici programa.
  3. Greške: Predstavljaju ozbiljne probleme povezane sa Java virtuelnom mašinom ili sistemskim resursima. Ne mogu se obraditi na nivou aplikacije, jer nisu problemi samog koda.

Primeri Error:

  • OutOfMemoryError: Java virtuelna mašina nije mogla da dodeli memoriju.
  • StackOverflowError: Došlo je do prelivanja steka (previše duboka rekurzija).
  • InternalError: Interna greška Java Virtual Machine.

Obrada Error pomoću try-catch nema smisla, jer ovi greške ukazuju na stanja iz kojih aplikacija obično ne može uspešno da se oporavi. Umesto toga, pri pojavi Error, aplikacija obično završava rad.

Iako je tehnički moguće napisati catch (Error e), takav kod se smatra lošom praksom i ne rešava osnovni problem.

try {
    // Kod koji može izazvati OutOfMemoryError
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Ovaj blok će se izvršiti, ali nećete moći da se oporavite,
    // jer sistem nema dovoljno memorije.
    System.err.println("Nema memorije! Aplikacija će verovatno da se prekine.");
    // Dalje radnje ovde su besmislene ili će izazvati SecurityException
} catch (Exception e) {
    // Obrada drugih izuzetaka
    e.printStackTrace();
}

U QA automatizaciji, ako se tokom izvršavanja testa pojavi Error, to više ukazuje na problem sa test okruženjem, pogrešnu konfiguraciju JVM-a ili ozbiljnu grešku u samoj aplikaciji koja je dovela do kritičnog kvara, nego na očekivanu, obrađenu izuzetnu situaciju. Takvi scenariji zahtevaju istragu uzroka van test koda.