1. throw operatori
Istisno holat, u sistemasiga tashlanmagan bo'lsa yoki u allaqachon catch bloki tomonidan tutib olingan bo'lsa — bu aslida faqat Exception (yoki to'g'risi Throwable) classidan meros olingan bir obyekt xolos. Obyekt istisno o'zi o'zida hech qanday sehrli xususiyatlarga ega emas.
Istisno holatlarining ishlash mantiqi — bu Java-mashinasi muhitiga istisno holat tashlanganda bir o'ziga xos ishlov scenariysi xolos.
Siz Java-mashinaga endigina tutib olgan istisno holatni qayta tashlashingiz mumkin. Buning uchun throw operatoridan foydalanishingiz kerak:
throw istisno;
Misol:
| Kod | Ekranga chiqishi |
|---|---|
|
|
Bu kodda biz istisno holatni tutib olib, ekranga shu haqda yozuv chiqarib, uni qayta tashladik.
Qayta tashlangan istisno bu try blokning boshqa catch bloklari tomonidan tutilishi mumkin emas.
2. O'zingizning istisno holatingiz
Aytgancha, siz o'zingiz istisno obyektini yaratishingiz mumkin: bu shunchaki Exception turdagi yoki undan meros olingan class obyektidir. Va uni tashlashingiz mumkin.
Bu ko'rinadiganidan osonroq. Misol:
| Kod | Ekranga chiqishi |
|---|---|
|
|
Yuqoridagi misolda biz RuntimeException turidagi yangi istisno obyektini yaratdik va darhol throw operatori yordamida uni tashladik.
Bu darhol catch bloki tomonidan tutib olinadi, chunki RuntimeException turi Exception turidan meros olingan. catch(Exception except) kodi Exception klassidan meros olishgan barcha klasslar istisno obyektlarini tutib oladi.
3. finally kalit so'zi
Yana bir muhim nuqta. Ba'zida dasturchiga kodda istisno mavjud bo'ladimi yoki yo'qmi, ba'zi harakatlarni bajarish kerak. Masalan, kodda biz faylni yozuv uchun ochdik va ochilgan faylni albatta close() metodi yordamida yopish zarur.
try
{
xato paydo bo'lishi mumkin bo'lgan kod
}
catch(IstisnoTuri nomi)
{
istisno holatini qayta ishlash kodi
}
finally
{
har holda bajarilishi kerak bo'lgan kod
}
Shunday majburiy harakatlarni bajarish uchun try-catch operatoriga yana bir blok qo'shildi — finally, va try-catch-finally operatori hosil bo'ldi. Bu holat taxminan shunday ko'rinadi:
Misol:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Istisno holatni tutib oldik");
throw except;
}
finally
{
if (source != null)
source.close();
}
finally blokidagi kod dasturda istisno bo'ladimi yoki yo'qmi, har holda bajariladi. Hatto istisno holati yuzaga kelgan bo'lsa va u tutib ololmagan bo'lsa ham, finally bloki baribir bajariladi.
Aytgancha, agar siz istisno holatini tutishni xohlamasangiz, lekin sizga finally bloki kerak bo'lsa, try-catch-finally blokining qisqartirilgan yozuvini — try-finally dan foydalaning. Bu taxminan quyidagicha ko'rinadi:
try
{
xato paydo bo'lishi mumkin bo'lgan kod
}
finally
{
har holda bajarilishi kerak bo'lgan kod
}
GO TO FULL VERSION