Sobes.tech
Junior

Java'da xatolar qanday ishlanadi va ular bilan qanday ishlash mumkin?

sobes.tech AI

AIdan javob

Java'da xatolar istisno mexanizmi yordamida boshqariladi. Istisnolar — bu dasturning odatiy bajarilish jarayonini to'xtatadigan voqealardir. Ikki turdagi istisnolar mavjud: Tekshiriladigan (Checked Exceptions) va Tekshirilmaydigan (Unchecked Exceptions).

Tekshiriladigan istisnolar:

  • java.lang.Exception dan meros oladi (RuntimeException bundan mustasno).
  • Ularni try-catch yordamida boshqarish yoki metod imzosida (throws) e'lon qilish kerak.
  • Oddiy sharoitlarda yuzaga kelishi mumkin bo'lgan xatolarni ifodalaydi (masalan, IOException, FileNotFoundException).

Tekshirilmaydigan istisnolar:

  • java.lang.RuntimeException yoki java.lang.Error dan meros oladi.
  • Majburiy boshqarish yoki e'lon qilish shart emas.
  • Ko'pincha koddagi mantiqiy xatolar yoki bajarilish muhitining noxush holatlarini ko'rsatadi (masalan, NullPointerException, ArrayIndexOutOfBoundsException).

Istisnalarni boshqarish:

Istisnalarni boshqarish uchun try-catch-finally bloklari ishlatiladi:

  • try: Xatolik yuzaga kelishi mumkin bo'lgan kod bloki.
  • catch: try blokida belgilangan turdagi istisno yuzaga kelsa, bajariladigan kod.
  • finally: Har doim bajariladigan kod. Ko'pincha resurslarni ozod qilish uchun ishlatiladi (masalan, fayllarni yopish, ulanishlarni yopish).
try {
    // Xatolik yuzaga kelishi mumkin bo'lgan kod
    int result = 10 / 0; // Misol: ArithmeticException
} catch (ArithmeticException e) {
    // ArithmeticException ni boshqarish
    System.err.println("Nolga bo'linish xatosi: " + e.getMessage());
    // Xatoni log qilish, foydalanuvchiga xabar ko'rsatish va boshqalar.
} catch (Exception e) {
    // Boshqa istisnalarni boshqarish
    System.err.println("Umumiy xato: " + e.getMessage());
} finally {
    // Har doim bajariladigan kod
    System.out.println("Finally bloki bajarildi.");
}

Istisnalarni uzatish:

Metod, muayyan istisnani generatsiya qilish imkoniyatini throws kalit so'zi yordamida e'lon qilishi mumkin:

public void readFile(String filePath) throws FileNotFoundException, IOException {
    // Faylni o'qish kodi
    // Fayl topilmasa, `FileNotFoundException` (`IOException` ning vorisi) chiqariladi
    FileReader fr = new FileReader(filePath);
    // I/O xatosi yuzaga kelsa, `IOException` chiqariladi
    // ...
}

Chaqiruvchi metod, yoki bu istisnani boshqarishi yoki throws bilan e'lon qilishi kerak.

O'z istisnalarini yaratish:

Exception yoki RuntimeException dan meros olgan o'z klasslarini yaratish mumkin:

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

Foydalanish:

public void processData(int value) throws MyCustomException {
    if (value < 0) {
        throw new MyCustomException("Qiymat manfiy bo'lishi mumkin emas");
    }
    // Ma'lumotlarni qayta ishlash
}

Asosiy istisno klasslari (hierarxiya):

  • java.lang.Throwable (barcha xatolar va istisnalar uchun asosiy klass)
    • java.lang.Error (jiddiy muammolar uchun, odatda, dastur tomonidan boshqarilmaydi, masalan, OutOfMemoryError)
    • java.lang.Exception (dastur tomonidan boshqariladigan istisnalar)
      • java.lang.RuntimeException (Tekshirilmaydigan istisnalar)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ArithmeticException
        • va boshqalar.
      • Exception ning boshqa subklasslari (Tekshiriladigan istisnalar)
        • IOException
        • FileNotFoundException
        • SQLException
        • va boshqalar.

Xatolar bilan ishlash, bu hierarxiyani tushunishni, mos turdagi istisnani tanlashni (o'zlar uchun yaratishda), try-catch-finally'ni samarali ishlatishni va xatolarni log qilishni, shuningdek, xatoliklarni debugging uchun qilishni o'z ichiga oladi.