Java try va catch

Xatoliklarga doir darsimizni davom ettiramiz. Bu darsimizda xatoliklarni aniqlash va dasturni ishlashiga to’sqinlik qilishini oldini olishni o’rganamiz.

Xatoliklarni ushlash uchun, Java dasturlash tili quyidagi kalit so’zlardan foydalanadi:

try - xatolikka moyil kod blokini o’z ichiga oladi. Agar try blokida qayerdadir xatolik ro’y bersa, blokning qolgan qismi ishga tushmaydi. Shuning uchun, xatolik ro’y bermaydigan kodlarni try blokidan tashqarida yozish zarur. Try blokidan keyin catch bloki yoki finally bloki yozilishi shart.

catch - try blokining noaniq holatini ushlash uchun ishlatiladi. U try blokida yuz berishi mumkin bo’lgan xatolikni ushlaydi. Catch blokida shuningdek log ma’lumotlar yozish, fayllarni va ulanishlarni yopish kabi ishlar bajariladi.

Try-catch sintaksisi

try {
   // xatolikka moyil kod bloki  
} catch (Exception_class_nomi xatolikni_ushlovchi_ozgaruvchi) {
  
}

finally - catch blokidan keyin ishga tushadigan blok. Bunda odatda bir nechta catch bloklar mavjud bo’lganda, barchasi uchun umumiy kod yoziladi. Shuni ta’kidlash joizki, finally bloki xatolik yuz bersa ham yuz bermasa ham ishga tushadi.

Try-finally bloki

try {
   // xatolikka moyil kod bloki
} finally {
   
}

throw - metodda exception obyektini uloqtirish (throw) uchun ishlatiladi. U metod ichida ishlatiladi.

throws - metod e’lon qilinayotganda exception classlar nomi bilan ishlatiladi va joriy metod qanday turdagi xatoliklar yuzaga keltirishi mumkinligini bildiradi. Uning o’zi xatolikni uloqtirmaydi, lekin u metodni try-catch blokisiz yozish imkonini beradi.

Try-catch yordamida yozilgan kod va usiz yozilgan kod farqini quyidagi misollarda bilib olamiz.

public class TryCatchMisol1 {  
  
    public static void main(String[] args) {  
          
        int data=50/0// xatolik yuz beradi
          
        System.out.println("Kodning davomi");  
          
    }  
      
}  
Exception in thread "main" java.lang.ArithmeticException: / by zero

Ikkinchi misol.

public class TryCatchMisol2 {  
  
    public static void main(String[] args) {  
        try  
        {  
        int data=50/0// xatolik yuz beradi
        }  
            // xatolikka ushlash  
        catch(ArithmeticException e)  
        {  
            System.out.println(e);  
        }  
        System.out.println("Kodning davomi");  
    }  
      
}  
java.lang.ArithmeticException: / by zero Kodning davomi

Dastlabki kodda, xatolikdan keyin dastur to’xtadi va keying xabar chop etilmadi. Ikkinchi kodda catch bloki xatolikni ushladi va dastur ishlashda davom etdi.

Try blokidan keyin bir emas bir nechta catch bloklar yozish mumkin:

public class MultipleCatchBlock1 {  
  
    public static void main(String[] args) {  
          
           try{    
                int a[]=new int[5];    
                a[5]=30/0;    
               }    
               catch(ArithmeticException e)  
                  {  
                   System.out.println("Arithmetic Exception ");  
                  }    
               catch(ArrayIndexOutOfBoundsException e)  
                  {  
                   System.out.println("ArrayIndexOutOfBounds Exception");  
                  }    
               catch(Exception e)  
                  {  
                   System.out.println("Boshqa biror Exception");  
                  }             
               System.out.println("Kod davomi");    
    }  
}  

Finally bloki ishtirokida misol ko’ramiz:

class TestFinallyBlock {    
public static void main(String args[]){    
  try{    
// quyidagi kod xatolik qaytarmaydi
   int data=25/5;    
   System.out.println(“try blokidagi natija: ” + data);    
  }    
// catch bloki ishga tushmaydi
  catch(NullPointerException e){  
System.out.println(e);  
}    
// finally bloki har doim ishga tushadi
 finally {  
System.out.println("finally bloki ishga tushdi ");  
}    
    
System.out.println("Kodning davomi");    
}    
}    
try blokidagi natija: 5 finally bloki ishga tushdi Kodning davomi

Throw kalit so’zi yordamida xatolikni uloqtirishga doir misol ko’ramiz:

public class TestThrow1 {   
    public static void validate(int age) {  
        if(age<18) {  
            throw new ArithmeticException("Shaxs ovoz berishga haqli emas!!");    
        }  
        else {  
            System.out.println("Shaxs ovoz berishga haqli!!");  
        }  
    }  
    public static void main(String args[]){  
      
        validate(13);  
        System.out.println("Kodning davomi");    
  }    
}    
Exception in thread "main" java.lang.ArithmeticException: Shaxs ovoz berishga haqli emas!!       at TestThrow1.validate(Main.java:4)       at TestThrow1.main(Main.java:12)