JavaRush /Kurslar /All lectures for UZ purposes /Istisno holatlarini hosil qilish

Istisno holatlarini hosil qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

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
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Istisno holatni tutib oldik");
   throw except;
}
Istisno holatni tutib oldik

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
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Istisno holatni tutib oldik");
   throw except;
}
Istisno holatni tutib oldik

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
}

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION