1. try-catch nə üçün lazımdır?
Artıq bildiyiniz kimi, proqramlaşdırmada xətalar daim baş verir: sıfıra bölmə, yalnış daxil etmə, faylın olmaması və s. Əgər belə vəziyyətlər emal olunmasa, proqram xəta ilə (qəza ilə) dayanacaq.
try-catch konstruksiyası istisnanı “tutmağa” və xətanı səliqəli şəkildə emal edərək proqramın çökməsinin qarşısını almağa imkan verir.
try-catch konstruksiyasının sintaksisi
try
{
// İstisna ata biləcək kod
}
catch (TipIsklyucheniya imyaPeremennoy)
{
// İstisnanı emal etmək üçün kod
}
İzah:
- try — “bu kodu icra etməyə çalış”.
- catch — “göstərilən tipdə istisna yaranarsa, onu burada emal et”.
Bu necə işləyir?
Əgər try blokunda istisna yaranarsa, həmin blokun icrası dərhal dayandırılır və idarəetmə ilk uyğun catch blokuna keçir. Əgər istisna yaranmasa — catch bloku ötürülür.
2. Nümunə: sıfıra bölmə
İstisna emalı olmadan
int a = 10;
int b = 0;
int result = a / b; // Burada proqram xəta ilə dayanacaq!
System.out.println("Nəticə: " + result); // Bura qədər çatmayacağıq
Nəticə:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:3)
try-catch ilə emal edərək
int a = 10;
int b = 0;
try
{
int result = a / b; // Burada istisna yarana bilər
System.out.println("Nəticə: " + result);
}
catch (ArithmeticException e)
{
System.out.println("Xəta: sıfıra bölmə mümkün deyil!");
}
System.out.println("Proqram işini davam etdirdi.");
Nəticə:
Xəta: sıfıra bölmə mümkün deyil!
Proqram işini davam etdirdi.
İzah:
- Java sıfıra bölməni görəndə dərhal istisna atır.
- try dayandırılır və idarəetmə catch blokuna keçir.
- Xəta emal edildikdən sonra proqram icranı davam etdirir.
3. catch bloku necə işləyir
catch sözündən sonra mötərizədə istisnanın tipi (məsələn, ArithmeticException) və dəyişənin adı (adətən e) göstərilir.
catch blokunun içində xəta haqqında detalları öyrənmək olar:
- e.getMessage() — xətanın qısa təsviri.
- e.printStackTrace() — ətraflı məlumat (sazlama üçün).
Nümunə:
try
{
int[] arr = new int[2];
int x = arr[10]; // Xəta: indeks mövcud deyil
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Xəta: " + e.getMessage()); // Xətanın mesajını göstəririk
e.printStackTrace(); // Xəta barədə bütün məlumatı konsola çap edirik
}
4. İstisna zamanı icra axını
Əgər try blokunda xəta yoxdursa — catch bloku ötürülür.
Əgər try blokunda xəta yarandısa — blokun icrası xəta baş verən yerdə dayandırılır və idarəetmə dərhal ilk uyğun catch blokuna keçir. try daxilində xətadan sonrakı heç nə icra olunmayacaq!
İllüstrasiya:
try
{
System.out.println("1. try-nin başlanğıcı");
int a = 10 / 0; // Xəta!
System.out.println("2. Bölmədən sonra"); // İcra olunmayacaq
}
catch (ArithmeticException e)
{
System.out.println("3. catch blokunda");
}
System.out.println("4. try-catch-dən sonra");
Nəticə:
1. try-nin başlanğıcı
3. catch blokunda
4. try-catch-dən sonra
5. try-catch istifadə edilərkən tipik səhvlər
Səhv № 1: Həddindən artıq geniş catch.
Əgər catch (Exception e) istifadə etsəniz, düzgün emal etməyi bacarmadığınız çoxlu gözlənilməz xətaları tuta bilərsiniz.
Həll: yalnız bu yerdə həqiqətən gözlənilən istisnaları tutun (məsələn, IOException, SQLException).
Səhv № 2: Boş catch.
catch (Exception e) {} yazmaq — problemi gizlətmək deməkdir. Proqram başqa yerdə çökə bilər və ya qəribə davrana bilər.
Həll: heç olmasa xətanı jurnallaşdırın (e.printStackTrace() və ya logger).
Səhv № 3: try-catch-in hər problemi həll edəcəyinə inanmaq.
Əgər problem proqramın məntiqindədirsə (məsələn, sıfıra bölmə, yalnış alqoritm) — heç bir try-catch kömək etməz.
Həll: try-catch-i yalnız həqiqətən gözlənilən hallar üçün istifadə edin, səhvləri gizlətmək üçün yox.
GO TO FULL VERSION