Sobes.tech
Junior

Java-da xətalar necə işlənir və onlarla necə işləmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da səhvlər istisna mexanizmi vasitəsilə idarə olunur. İstisnalar, proqramın normal icrasını pozan hadisələrdir. İki növ istisna var: Checked Exceptions və Unchecked Exceptions.

Checked Exceptions:

  • java.lang.Exception-dən irsən gəlir (yalnız RuntimeException istisna olmaqla).
  • Zəruri hallarda (try-catch ilə) idarə olunmalı və ya metodun imzasında (throws) qeyd edilməlidir.
  • Adətən, normal şəraitdə baş verə biləcək səhvləri təmsil edir (məsələn, IOException, FileNotFoundException).

Unchecked Exceptions:

  • java.lang.RuntimeException və ya java.lang.Error-dən irsən gəlir.
  • Zəruri deyil, idarə və ya qeyd edilməlidir.
  • Tez-tez kodda məntiqi səhvləri və ya icra mühitinin qeyri-stabil vəziyyətlərini göstərir (məsələn, NullPointerException, ArrayIndexOutOfBoundsException).

İstisnaların idarə olunması:

try-catch-finally blokları istifadə olunur:

  • try: İstisna yarada biləcək kod.
  • catch: try-də istisna baş verərsə, icra olunan kod.
  • finally: Həmişə icra olunan kod, resursların azad olunması üçün istifadə olunur.
try {
    // İstisna yarada biləcək kod
    int result = 10 / 0; // Nümunə: ArithmeticException
} catch (ArithmeticException e) {
    // ArithmeticException-un idarə olunması
    System.err.println("Sıfıra bölmə xətası: " + e.getMessage());
    // Xətanın qeydiyyatı, istifadəçiyə mesaj göstərilməsi və s.
} catch (Exception e) {
    // Digər istisnaların idarə olunması
    System.err.println("Ümumi xəta baş verdi: " + e.getMessage());
} finally {
    // Həmişə icra olunan kod
    System.out.println("Finally bloku icra olundu.");
}

İstisnaların ötürülməsi:

Metod müəyyən istisnaları yarada bilər və throws açar sözü ilə bildirə bilər:

public void readFile(String filePath) throws FileNotFoundException, IOException {
    // Fayl oxuma kodu
    FileReader fr = new FileReader(filePath);
    // Əgər fayl tapılmazsa, `FileNotFoundException` atıla bilər
    // Əgər giriş-çıxış xətası baş verərsə, `IOException` atıla bilər
    // ...
}

Çağıran metod ya bu istisnaları idarə etməli (try-catch) və ya da throws ilə qeyd etməlidir.

Öz istisnalarınızı yaratmaq:

Exception və ya RuntimeException-dən irsənən öz istisna sinfləri yarada bilərsiniz:

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

İstifadəsi:

public void processData(int value) throws MyCustomException {
    if (value < 0) {
        throw new MyCustomException("Dəyər mənfi ola bilməz");
    }
    // Məlumatların işlənməsi
}

Əsas istisna sinifləri (iyerarxiya):

  • java.lang.Throwable (bütün səhvlər və istisnalar üçün əsas sinif)
    • java.lang.Error (ciddi problemlər üçün, adətən idarə olunmur, məsələn, OutOfMemoryError)
    • java.lang.Exception (programın idarə edə biləcəyi istisnalar)
      • java.lang.RuntimeException (Unchecked Exceptions)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ArithmeticException
        • və s.
      • Digər Exception alt sinifləri (Checked Exceptions)
        • IOException
        • FileNotFoundException
        • SQLException
        • və s.

Xətalarla işləmək bu iyerarxiyanı anlamağı, öz istisnalarınızı yaratmaq üçün düzgün tipi seçməyi, try-catch-finally-dən səmərəli istifadə etməyi və xətaları qeydiyyata almağı əhatə edir ki, bu da debugging üçün faydalıdır.