Java-da istisna işləmə


JavaBaxılıb 41

Java-dakı istisnalarla işləmə Java proqramlaşdırmasında ən vacib anlayışlardan biridir. Proqram inkişaf etdirdiyimiz zaman java istisnalarını düzgün idarə etdiyimizə əmin olmalıyıq. Bu təlimatda java istisnaları və növləri ilə yanaşı istisnada istifadə etdiyimiz vacib terminologiyaları da anlayacağıq.

İstisna nədir

Java'da bir istisna gözlənilməz bir şərtlə qarşılaşdıqda icra prosesini dayandıran və ya dayandıran bir şərtdir. Bu, normal icra axınını dayandırır və istifadəçinin başa düşmədiyi bir sistem tərəfindən yaradılan mesajı atır. İstisna olduqda istifadəçiyə mənalı bir mesaj verərək bu vəziyyəti javada həll edə bilərik.

İstisna nə vaxt baş verir

İstisnalar ya insan səhvləri, ya da proqram səhvləri səbəbindən baş verə bilər. Aşağıda java istisnasının baş verməsi üçün bir neçə səbəb var:

  • Pis istifadəçi məlumatlarının verilməsi
  • Mövcud olmayan bir sənəd açılır
  • İndeksi olmayan bir sıra elementinə giriş
  • Səhv şəbəkə və ya şəbəkə bağlantısı problemləri

Java-da istisna işlənməsinin üstünlükləri

  • İcra axınına xitam vermir
  • Qalan proqramın icrası ilə istisna və gəlirləri idarə edir

İstisna işinin üstünlüyünü sadə bir nümunə ilə başa düşək. Tutaq ki, icra etmək üçün 100-ə yaxın bəyanatımız var və işlənməyən 25-ci ifadədə bir istisna baş verir, o zaman proqramı icrasını dayandırmağa məcbur edir və bu ifadələri heç vaxt 26-dan 100-ə qədər yerinə yetirməyəcəkdir. Bunu aradan qaldırmaq üçün 25-ci ifadədə ortaya çıxan istisnanı idarə edirik, sonra qalan icrasını ləğv etmək əvəzinə eyni işləyir və bütün proqram icrasını son 100-cü ifadəyə qədər davam etdiririk.

Java-da istisna hiyerarşisi

Java-da təhvil verməPin

Java istisna növləri

Java istisnalarını iki kateqoriyaya bölə bilərik:

  • Yoxlanılan istisnalar:
  • Yoxlanmamış istisnalar:

Yoxlanılan istisnalar

Onlara da ad verə bilərik tərtib kod tərtibi zamanı tərtibçinin onları idarə etdiyi mənasını verən istisnalar. Başqa sözlə, tərtib zamanı istisnanı yoxlayır və inkişaf etdiriciyə istisnanın baş vermə ehtimalı olduğunu xəbərdar edir. Bu vəziyyətdə, geliştirici bunu kodda idarə etməlidir. Nümunə: IOException, FileNotFoundException və s

misal

Aşağıda yoxlanılmış bir istisna nümunəsidir. Fərz edək ki, içəridə FileReader sinifindən istifadə etməyə çalışdığımız bir sinif var. Faylla əlaqəli istisnaları həll edə bilmiriksə əldə edə bilərik. Beləliklə, tərtibçi istisnanı idarə etməməyimizi istisna etmək üçün bir xəbərdarlıq edir.

import java.io.*;

public class CheckedExceptions {

  public static void main(String[] args) {
    String filename = "D:\\CheckedExceptions.txt";
    File f = new File(filename);
    FileReader fr = new FileReader(f);
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Unhandled exception type FileNotFoundException

  at CheckedExceptions.main(CheckedExceptions.java:8)

Yoxlanılmış istisna işlənməsini 2 fərqli şəkildə həyata keçirə bilərik:

Istifadə açar söz atar

Biz istifadə edə bilərik açar söz atar istisna növünü idarə etmək üçün metod bildirişində. Aşağıda FileNotFoundException idarə etmək üçün bir nümunə var. Ancaq bu yaxşı bir yanaşma deyil, çünki istifadəçi dostu bir mesaj təqdim etmirik və istifadəçinin başa düşə bilməyəcəyi sistem mesajları yaradır.

import java.io.*;

public class CheckedExceptions {
  
  public void readFile() throws FileNotFoundException {
    String filename = "D:\\CheckedException.txt";
    File f = new File(filename);
    FileReader fr = new FileReader(f);
  }


  
}

Blokdan istifadə edin

Biz istifadə cəhd edin açar sözlər, birləşmə bloku daxilində istisnalar yarada bilən kodu yazdığımız və tutma blokunun içərisindəki istisna mesajından bəhs etdiyimiz bir söz kimi. Bu, ən yaxşı yanaşmadır, çünki tutma blokunun içindəki istisna səbəbini açıq şəkildə qeyd edə bilərik. Ayrı bir dərsdə try-catch bloku barədə ətraflı danışacağıq.

import java.io.*;

public class CheckedExceptions {
  
  public void readFile() {
    String filename = "D:\\CheckedException.txt";
    File f = new File(filename);
    try {
      FileReader fr = new FileReader(f);
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }


  
}

Yoxlanmamış istisnalar

Onlara da zəng edə bilərik iş vaxtından bəri istisnalar proqramın icrası zamanı baş verir. Geliştiricinin gözlənilməz bir vəziyyətlə qarşılaşdıqda kod icrasından təhlükəsiz çıxması üçün bunları idarə etməsi çox vacibdir. Nümunə: ArrayIndexOutOfBoundException, NullPointerException və s.

misal

Bu, əslində mümkün olmayan bir ədədi 0-a bölməyə çalışdığımız yoxlanılmamış istisnanın ən ümumi nümunəsidir. Çalışma vaxtı istisnaları həqiqətən kodu uğurla tərtib edir və icra zamanı bir istisna atır. Koddakı istisnanı həll etmədiyimizdən, bəyanatın icrasına son verildiyini görə bilərik int result = a/0 və qalan ifadələri icra etmir.

public class UncheckedException {
  
  int a = 5;
  
  public void divide() {
    int result = a/0;
    System.out.println(result);
    System.out.println("Divide method executed");
  }

  public static void main(String[] args) {
    UncheckedException uce = new UncheckedException();
    uce.divide();

  }

}
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at UncheckedException.divide(UncheckedException.java:7)
  at UncheckedException.main(UncheckedException.java:13)

İstisnanın idarə olunması

İstifadəsiz istisna işlənməsini ya istifadə edərək tətbiq edə bilərik throws və ya blokları sınamaq. Aşağıdakı nümunədə içərisində bir istisna yarada biləcək kodu yazdığımız bir try-catch blokundan istifadə etdik try bloku bağlayın və içərisindəki mesajı yazın catch blok. İndi kodu icra etdiyimiz zaman istisnanı uğurla idarə edir və mesajı yazdırır. Ayrıca, koddakı qalan ifadələri yerinə yetirir. Diqqət yetirsəniz, son çap ifadəsini icra etmədi “Bölmə metodu icra edildi” istisna ilə məşğul olmadığımız zaman.

public class UncheckedException {
  
  int a = 5;
  
  public void divide() {
    try {
      int result = a/0;
      System.out.println(result);
    }
    catch(ArithmeticException e) {
      System.out.println("Division by 0 is not allowed");
    }
    System.out.println("Divide method executed");
  }

  public static void main(String[] args) {
    UncheckedException uce = new UncheckedException();
    uce.divide();

  }

}
Division by 0 is not allowed
Divide method executed

Java İstisna metodları

Aşağıda ümumi var metodika javada istisna işləmə zamanı istifadə etdiyimiz. Bu metodların nümunələri yuxarıdakı UncheckedException nümunəsinə əsaslanır.

Üsultəsvirmisal
public String getMessage ()Throwable nümunəsinin ətraflı istisna mesajını qaytarır./ sıfıra
ümumi String getCause ()Məlum olduğu təqdirdə Throwable nümunəsinin səbəbini qaytarır, əks halda null qaytarırnull
ictimai boşluq printStackTrace ()Throwable nümunəsini və arxa izini standart səhv axınına yazdırır.java.lang.ArithmeticException: / sıfır
UncheckedException.divide saytında (UncheckedException.java:8)
UncheckedException.main-də (UncheckedException.java:21)
ümumi String toString ()İstisnanın sinif adını və ardından istisna mesajını qaytarırjava.lang.ArithmeticException: / sıfır

Java İstisnası Açar sözlər

Java-da istisna işləmə tətbiq etmək üçün kodumuzdakı aşağıdakı 5 açar sözdən birini istifadə edirik.

İstisna açar söztəsvir
cəhdİstisnanın baş verə biləcəyi kodu ehtiva edir. Həmişə tutma blokundan əvvəldir
tutmaqİstisnanı idarə etmək üçün kodu ehtiva edir. İstisna mesajını yazdırır. Həmişə cəhd blokunu izləyir
nəhayətArdından try bloku gəlir və istisnanın baş verməsindən asılı olmayaraq yerinə yetirilməsi lazım olan vacib kodu idarə edir
atırMetod imzasında istisnaları elan etmək üçün istifadə olunur. Metodun idarə etdiyi istisna növünü müəyyənləşdirir.
atmaqİstisna atmaq üçün istifadə olunur

Sadə İstisna İdarəetmə nümunəsi

Aşağıda java-da istisna rəftarını göstərən sadə bir nümunə var. Bir sıra tamsayıları dəyişən elan edirik nömrələri və 4 dəyərlə başlayın. Buna görə array ölçüsü 4 ilə 0 arasında dəyişən indekslə 3-dur arrayElements üsulu içərisində sıra indeks dəyərini 4 yazdırırıq try ArrayIndexOutOfBoundsException-ı bloklayın və idarə edin catch blok. İçində finally blok, yalnız bir bəyanat çap edirik. İndi bu kodu icra etdiyimiz zaman istisnanı müvəffəqiyyətlə idarə edir və səhv mesajını, içindəki ifadə ilə birlikdə yazdırır finally blok. İstisnanın olub-olmamasından asılı olmayaraq bu bloku icra edir.

public class ArrayException {

  int[] numbers = {5,8,1,3};
  public void arrayElements() {
    try {
      System.out.println("Element at index 4: " + numbers[4]);	
    }
    catch(ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
      System.out.println("Element at specified index does not exist");
    }
    finally {
      System.out.println("Handling Array Exceptions");
    }
  }
  public static void main(String[] args) {
    ArrayException a  = new ArrayException();
    a.arrayElements();

  }

}
Index 4 out of bounds for length 4
Element at specified index does not exist
Handling Array Exceptions

 

arayış

Şərh yaz

Translate »
1