Java Xatoliklar (Exceptions)

Exception - lug’aviy jihatdan normal bo’lmagan holat yoki istisno degan ma’nolarni anglatadi. Java dasturlash tilida, exception dastur ishlash jarayonini buzadigan xodisa hisoblanadi. Metod ichida xatolik yuz berganda, u obyekt yaratadi va obyekt xatolik haqida ma’lumotlar, uning sabablaridan iborat bo’ladi. Xatoliklarga asosiy sabablar quyidagilar bo’lishi mumkin:

  • Kiritilgan ma’lumot (input) yaroqsiz
  • Qurilma buzilishi
  • Tarmoqdan uzilish
  • Fizik cheklovlar (xotira, ...)
  • Kodda xatolar
  • Mavjud bo’lmagan faylning ochilishi

Exception Handling - bu dastur ish jarayonini saqlagan holda xatolikni (exception) ushlash mexanizmidir. Javada Exception classlarning ierarxiyasi quyidagi rasmda tasvirlangan:

Exceptionlar asosan 2 turga bo’linadi: checked (tekshirilgan) va unchecked (tekshirilmagan). Error unchecked turga kiradi. Lekin Oracle talqiniga ko’ra, xatoliklar 3 xil bo’ladi:

Checked Exception - Throwable classidan to’g’ridan-to’g’ri meros olgan va RuntimeException va Error classlardan tashqari barcha classlar. Masalan, IOException, SQLException, va boshqalar. Ushbu turdagi xatoliklar kompilyatsiya vaqtida aniqlanadi va to’g’irlanadi.

Unchecked Exception - RuntimeException classidan meros olgan barcha classlar. Masalan, ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException va boshqalar. Ushbu turdagi xatoliklar kompilyatsiya paytida aniqlanmaydi, ammo ish vaqtida aniqlanadi va ularni tuzatish mumkin.

Error - bu tuzatish imkonsiz bo’lgan xatoliklar. Masalan, OutOfMemoryError, VirtualMachineError, AssertionError.

Yuqoridagi ko’rib o’tgan xatolik turlari sistema tomonidan yozilgan xatoliklar hisoblanadi. Ba’zi holatlarda mavjud Sistema xatoliklarni vaziyatni yetarlicha tasvirlab bera olmasligi mumkin. Shunday holatda, dasturchi o’zi uchun maxsus foydalanuvchi tomonidan yozilgan xatoliklarni yozib ishlatishi mumkin.

Xatolik xabarini chop etish uchun quyidagi usullar mavjud:

printStackTrace() - exception nomini, xatolik sababini va uning kelib chiqish yo’lini yoki izini ham ko’rsatadi. Quyidagi misolga e’tibor bering:

import java.io.*;
 
class Misol {
    public static void main (String[] args) {
      int a=5;
      int b=0;
        try{
          System.out.println(a/b);
        }
      catch(ArithmeticException e){
        e.printStackTrace();
      }
    }
}
java.lang.ArithmeticException: / by zero at Misol.main(File.java:10)

toString() - exception nomini va xatolik sababini chiqaradi. Masalan:

import java.io.*;
 
class Misol {
    public static void main (String[] args) {
      int a=5;
      int b=0;
        try{
          System.out.println(a/b);
        }
      catch(ArithmeticException e){
        System.out.println(e.toString());
      }
    }
}
java.lang.ArithmeticException: / by zero

getMessage() - faqat xatolik sababini chiqaradi:

import java.io.*;
 
class Misol {
    public static void main (String[] args) {
      int a=5;
      int b=0;
        try{
          System.out.println(a/b);
        }
      catch(ArithmeticException e){
        System.out.println(e.getMessage());
      }
    }
}
/ by zero

Yuqoridagi misollarda “/ by zero” ifodasi xatolik sababi bo’lib, “nolga bo’lish” degan ma’noni anglatadi.

Keyingi darsimizda xatoliklarni qanday ushlashni ko’rib chiqamiz.