Sobes.tech
Middle

Kāda Java izņēmuma veida nav iespējams apstrādāt?

sobes.tech AI

Atbilde no AI

Kļūda.

Java sadala izņēmumus (Throwable) galvenajos trīs veidos:

  1. Pārbaudītās izņēmumi (Checked Exceptions): Prasa obligātu apstrādi vai paziņojumu metodes parakstā (throws).
  2. Nepārbaudītās izņēmumi (Unchecked Exceptions, Runtime Exceptions): Nepieciešama obligāta apstrāde. Parasti norāda uz programmas loģikas kļūdām.
  3. Kļūdas (Errors): Attiecas uz nopietnām problēmām, kas saistītas ar Java virtuālo mašīnu vai sistēmas resursiem. Tās nav iespējams apstrādāt lietotāja līmenī, jo tās nav saistītas ar koda problēmām.

Error piemēri:

  • OutOfMemoryError: Java virtuālā mašīna nevarēja piešķirt atmiņu.
  • StackOverflowError: Stack pārplūde (pārāk dziļa rekursija).
  • InternalError: Java Virtual Machine iekšēja kļūda.

Error apstrāde ar try-catch nav jēgpilna, jo šīs kļūdas norāda uz stāvokļiem, no kuriem lietotne parasti nevar veiksmīgi atgūties. Tā vietā, ja rodas Error, lietotne parasti pārtrauc darbu.

Tehniski ir iespējams rakstīt catch (Error e), bet šāds kods tiek uzskatīts par sliktu praksi un neatrisina galveno problēmu.

try {
    // Kods, kas var izraisīt OutOfMemoryError
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Šis bloks tiks izpildīts, bet jūs nevarēsiet atgūties,
    // jo sistēma nav pieejama pietiekami daudz atmiņas:
    System.err.println("Out of memory! Application will likely terminate.");
    // Turpmākās darbības šeit ir bezjēdzīgas vai izraisīs SecurityException
} catch (Exception e) {
    // Citu izņēmumu apstrāde
    e.printStackTrace();
}

QA automatizācijā, ja testa laikā rodas Error, tas vairāk norāda uz testa vides problēmu, JVM konfigurācijas kļūdu vai nopietnu kļūdu pašā lietojumprogrammā, kas noveda pie kritiska kļūmes, nevis uz gaidāmo apstrādāmo izņēmumu. Šādos scenārijos ir nepieciešama saknes cēloņa izpēte ārpus testa koda.