Sobes.tech
Middle

Java'da qanday turdagi xato bilan kurashib bo'lmaydi?

sobes.tech AI

AIdan javob

Xato.

Java xatoliklar (Throwable) ni uchta asosiy turga bo'linadi:

  1. Tekshiriladigan xatoliklar: Majburiy tarzda ishlov berishni yoki metod imzosida e'lon qilishni talab qiladi (throws).
  2. Tekshirilmaydigan xatoliklar (Runtime Exceptions): Majburiy ishlov berishni talab qilmaydi. Odatda, dastur mantiqidagi xatoliklarni ko'rsatadi.
  3. Xatoliklar: Java virtual mashinasi yoki tizim resurslari bilan bog'liq jiddiy muammolarni ifodalaydi. Ularni ilova darajasida ishlov berib bo'lmaydi, chunki ular kodning o'zidan muammo emas.

Error misollari:

  • OutOfMemoryError: Java virtual mashinasi xotirani ajrata olmadi.
  • StackOverflowError: Stack to'lib ketdi (juda chuqur rekursiya).
  • InternalError: Java Virtual Mashinasining ichki xatosi.

Error bilan try-catch ishlatish ma'nosiz, chunki bu xatoliklar odatda ilova muvaffaqiyatli tiklanolmaydigan holatlarni ko'rsatadi. Buning o'rniga, Error yuzaga kelganda, ilova odatda to'xtaydi.

Texnik jihatdan catch (Error e) yozish mumkin bo'lsa-da, bu kod yomon amaliyot hisoblanadi va asosiy muammoni hal qilmaydi.

try {
    // OutOfMemoryError chaqirishi mumkin bo'lgan kod
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Bu blok bajariladi, lekin tiklab bo'lmaydi,
    // chunki tizimda yetarli xotira yo'q.
    System.err.println("Xotira tugadi! Ilova ehtimol yakunlanadi.");
    // Keyingi harakatlar foydasiz yoki SecurityException chaqiradi
} catch (Exception e) {
    // Boshqa istisnalarni ishlash
    e.printStackTrace();
}

QA avtomatlashtirishda, agar test bajarilayotganda Error yuzaga kelsa, bu odatda test muhitidagi muammo, JVM konfiguratsiyasining noto'g'ri bo'lishi yoki ilovaning jiddiy xatosi bilan bog'liq bo'lib, kutiladigan, boshqariladigan istisno emas, balki kritik muammo ekanligini ko'rsatadi. Bunday holatlar, test kodidan tashqarida asosiy sababni o'rganishni talab qiladi.