CodeGym /Kurslar /JAVA 25 SELF /İstisnaların emalına giriş

İstisnaların emalına giriş

JAVA 25 SELF
Səviyyə, Dərs
Mövcuddur

1. İstisnalarla tanışlıq

Gəlin sadə bir analogiyadan başlayaq. Təsəvvür edin ki, proqramınız — yolda gedən avtomobildir. Hər şey qaydasındadır, ta ki qəfil nəsə baş verməsin: təkər deşilib, benzin qurtarıb, mühərrik qızıb. Bu vəziyyəti «emal» etməsəniz (məsələn, ehtiyat təkəri qoymasanız və ya yanacaq doldurmasanız), maşın dayanacaq və daha getməyəcək. Proqramda da eyni qaydada: istisnanı emal etməsəniz, proqram qəza ilə dayanacaq.

İstisna (exception) — icra zamanı hər hansı problem yarandıqda yaradılan obyektdir. İstisna xəbər verir: «Dayan! Nəsə qaydasında deyil!»

İstisnaların yarandığı situasiyalara nümunələr:

  • Sıfıra bölmə (10 / 0)
  • Mövcud olmayan massiv elementinə müraciət (arr[999])
  • Diskdə mövcud olmayan faylın açılması
  • "abc" sətrinin ədədə çevrilməsi (Integer.parseInt("abc"))

Vacibdir: İstisnalar — kompilyasiya xətaları (məsələn, kodda yazı səhvləri) deyil, proqram işləyən zaman yaranan problemlərdir.

Niyə istisnalar faydalıdır?

  • Təmiz kod: Proqramın əsas məntiqi hər xırdalığa görə daimi yoxlamalarla çirklənmir.
  • Elastiklik: Xətaları mərkəzləşdirilmiş şəkildə emal etmək olar (məsələn, bütün fayl oxuma xətalarını — bir yerdə).
  • Etibarlılıq: Proqram müəmmalı bir mesajla «düşmək» əvəzinə, nə baş verdiyini konkret bildirir.

2. İstisnalar (Exceptions) vs Xətalar (Errors)

Java-da proqram işləyərkən yarana bilən iki əsas problem tipi var:

Xətalar (Errors)

Xətalar — Java virtual maşınının (JVM) özündə baş verən nasazlıqlardan qaynaqlanan fatal, bərpaolunmaz problemlərdir. Adətən kompüter resursları və ya JVM-in daxili nasazlıqları ilə bağlı olur.

Xəta nümunələri:

  • OutOfMemoryError — yaddaş tükənib.
  • StackOverflowError — yığının daşması (məsələn, sonsuz rekursiya səbəbindən).

Vacibdir: Belə xətaları, adətən, proqramda emal etməyə cəhd etməyə dəyməz.

İstisnalar (Exceptions)

İstisnalar — proqramın öhdəsindən gələ biləcəyi (və gəlməli olduğu) problemlərdir. Onlar proqram məntiqindəki səhvlərdən və ya xarici amillərdən (məsələn, istifadəçi gözləniləndən fərqli məlumat daxil edib) yarana bilər.

İstisna nümunələri:

  • NullPointerException — null-u obyekt kimi istifadə etmək cəhdi.
  • ArrayIndexOutOfBoundsException — massiv sərhədlərindən kənara çıxma.
  • IOException — fayllarla işləyərkən xəta.

Java-da istisnalar iki növdür:

  • Checked exceptions (yoxlanılan) — kompilyator onların emalını tələb edir (məsələn, IOException).
  • Unchecked exceptions (yoxlanılmayan) — kompilyator emal etməyi tələb etmir (məsələn, NullPointerException).

Sxem: nələr harada yerləşir

graph TD
    Throwable --> Error
    Throwable --> Exception
    Exception --> RuntimeException
    Exception --> Checked["(digər Exceptions)"]

    style Throwable fill:#ffa64d,color:#000
    style Exception fill:#ffa64d,color:#000
    style Checked fill:#ffa64d,color:#000
    style Error fill:#ff4d4d,color:#fff
    style RuntimeException fill:#4dff88,color:#000

İzah:

  • Throwable — Java-da xətalar və istisnalar iyerarxiyasının kök sinfidir.
  • Error — JVM-in fatal xətaları, emal olunmurlar.
  • Exception — emal edilə bilən və edilməli olan “adi” istisnalardır.
  • RuntimeException — yoxlanılmayan istisnalar (proqramçı səhvləri).

3. Bu, kodda necə görünür?

Nümunə 1: Sıfıra bölmə

public class ExceptionDemo 
{
    public static void main(String[] args) 
    {
        int a = 10;
        int b = 0;
        int c = a / b; // Burada ArithmeticException yaranacaq!
        System.out.println("Nəticə: " + c);
    }
}

Nə baş verəcək?
Proqram xəta ilə dayanacaq və siz belə bir mesaj görəcəksiniz:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionDemo.main(ExceptionDemo.java:5)

Nümunə 2: Mövcud olmayan massiv elementinə müraciət

int[] arr = {1, 2, 3};
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException

Nümunə 3: Fayllarla iş

import java.io.FileReader;
import java.io.IOException;

public class FileDemo 
{
    public static void main(String[] args) throws IOException 
    {
        FileReader reader = new FileReader("nofile.txt");     // FileNotFoundException (checked)
        int data = reader.read();
        System.out.println(data);
        reader.close();
    }
}

İndi isə bu cür istisna halları necə səliqəli şəkildə emal etməyi nəzərdən keçirəcəyik.

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Zorg-kalkulyatoru və böyük sıfıra bölünmə 🌌
Zorg-kalkulyatoru və böyük sıfıra bölünmə 🌌
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Çantadakı mövcud olmayan kristalı axtarmaq 🎒
Çantadakı mövcud olmayan kristalı axtarmaq 🎒
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Oyunçunun yaşı: "iyirmi" 20 əvəzinə 🎮
Oyunçunun yaşı: "iyirmi" 20 əvəzinə 🎮
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Gizli agentin adı yoxdur 🤫
Gizli agentin adı yoxdur 🤫
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION