1. throw
operatoru
İstisna, sistemə atılmadığı müddətcə və ya artıq catch
bloku ilə tutulduğu zaman — sadəcə Exception
(daha dəqiq Throwable
) sinifindən törəmiş bir obyektdir. İstisna obyekti heç bir xüsusi sehrli xüsusiyyətə malik deyil.
İstisnaların iş prinsipinin bütün məntiqi — sadəcə Java maşınının mühitində istisna atılarkən xüsusi bir davranış ssenarisidir.
Siz həmişə yenidən Java maşınına yalnızca tutduğunuz istisnanı ata bilərsiniz. Bunun üçün throw
operatorunu istifadə edin:
throw istisna;
Nümunə:
Kod | Ekranda Çıxış |
---|---|
|
|
Bu kodda biz istisnanı tutduq, onu ekrana çap etdik və yenidən atdıq.
Təkrar atılan istisna eyni try
blokunun digər catch
blokları tərəfindən tuta bilməz.
2. Öz istisnanız
Bu arada, öz istisna obyektinizi yarada bilərsiniz: bu sadəcə Exception
növündəki obyekt və ya bu sinifdən irsi götürülmüş sinifdir. Və onu ata bilərsiniz.
Bu düşündüyünüzdən daha sadədir. Məsələn:
Kod | Ekrana Çıxış |
---|---|
|
|
Yuxarıdakı misalda biz yeni RuntimeException
növündə bir istisna obyekti yaratdıq və dərhal onu throw
operatoru ilə atdıq.
O dərhal catch
bloku tərəfindən tutulacaq, çünki RuntimeException növü Exception
növündən irsi götürülüb. catch(Exception except)
kodu Exception
sinifindən irsi götürülmüş bütün siniflərin istisna obyektlərini tutur.
3. finally
açar sözü
Daha bir vacib məqam. Bəzən proqramçıya kodda istisna olub-olmamasından asılı olmayaraq bəzi hərəkətləri yerinə yetirmək lazımdır. Məsələn, kodda faylı yazmaq üçün açırıq, amma açılmış faylı mütləq close()
metodunu çağıraraq bağlamaq lazımdır.
try
{
səhv ola biləcək kod
}
catch(ExceptionType name)
{
istisnaların emalı kodu
}
finally
{
hər halda icra olunacaq kod
}
Belə məcburi əməliyyatları yerinə yetirmək üçün try-catch
operatoruna daha bir blok əlavə etdilər — finally
, və nəticədə try-catch-finally
operatoru yarandı. Bu təxminən belə görünür:
Nümunə:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("İstisna tutuldu");
throw except;
}
finally
{
if (source != null)
source.close();
}
finally
blokundakı kod istisna olub-olmamasından asılı olmayaraq hər halda icra olunacaq. Hətta istisna baş veribsə və tutulmayıbsa belə, finally
bloku yenə də icra olunacaq.
Bu arada, istisnanı tutmaq istəmirsinizsə, amma finally
bloku lazımdırsa, try-catch-finally
blokunun qısaldılmış formasından istifadə edin — try-finally
. Bu təxminən belə görünür:
try
{
səhv ola biləcək kod
}
finally
{
hər halda icra olunacaq kod
}
GO TO FULL VERSION