6- ma’ruza. O‘rnatilgan tizimlarga uzilish ish tartibini joriy etish


Download 386.83 Kb.
bet5/5
Sana18.06.2023
Hajmi386.83 Kb.
#1577839
1   2   3   4   5
Bog'liq
6-maruza uzilishlar

, ArrayIndexOutOfBounds Exception, ClassNotFoundException lardan foydalaniladi. Pastda bu sinfning asosiy qismi ko‘rsatilgan (e’tiboringizni shunga qaratishingiz lozimki, ba’zi bir a’zolar virtualdir va bundan xulosa qilish mumkinki, ular boshqa sinflardan tashkil topgan):




ESLATMA! Exception sinfi 2 ta NET interfeysini joriy qiladi. Interfeyslar hozirgacha mukammal ko‘rib chiqilmagan bo‘lsada, shuni bilish kerakki, _Exception NET istisnosini beradi va u boshqarib bo‘lmaydigan kodli baza bilan qayta ishlanadi.

7.1 -jadval: Exceptionning asosiy xususiyatlari:

throw

Exception bilan birgalikda foydalaniladi

Data

bu xususiyat faqat o‘qish uchun mo‘ljallangan bo‘lib, ma’lumotlarni olishga yordam beradi.

ArithmeticException

bu xususiyat fayllardan xatolarni tuzatish va URL larni o‘rnatadi

Throwable

bu faqatgina o‘qilishi mumkin bo‘lgan xossa bo‘lib, u oldindagi istisno yoki istisnolar haqida ma’lumot olish uchun ishlatiladi. Oldindagi istisnolar yozib olinishi eng oxirgi istisnoni konstruktorga uzatish orqali amalga oshiriladi

Throwable(String msg, Throwable cause)

bu faqat o‘qish imkonini beruvchi xossa bo‘lib, matndagi berilgan xatoni qaytarib beadi. Xato haqidagi xabar konstruktor parametridek o‘rnatiladi.

getCause() method 

Bu usul xatolikni qaytarish uchun foydalaniladi

initCause(Throwable cause) method

bu faqatgina o‘qish uchun mo‘ljallangan bo‘lib, o‘z ichida chaqiruvlar qatorini saqlaydi.bu qator esa istisnolar shakllanishiga olib keladi. Bunday xususiyat juda foydaliligini tushunish qiyin emas.

Oddiy misol
Biz tartib bilan qayta ishlangan istisnolarni foydali tomonini ko‘rsatish uchun shunday sinf tashkil qilishimiz kerakki, ular istisno holatlarda generatsiya qiladi. Yangi konsol ilova proektini yaratamiz va unda 2 ta Sar va Radio sinfi ajratamiz, o‘rtasini “imeet” bilan bog‘laymiz. Radio sinfida yakka usul aniqlangan bo‘lib, u radiopriyomnikning yoqish va o‘chirishga javob beradi.

class Radio
{
public void TurnOn(bool on)
{
if (on)
Console.WriteLine("Jamming...");
else
Console.WriteLine("Quiet time...");
}
}

Radio sinfini yoqish orqali to‘ldirilganda shu narsa ko‘riladiki, foydalanuvchi oldindan ko‘rilgan yuqori tezlikni oshiradi, motor ishdan chiqadi, Car obektini ishchi bo‘lmagan holatga olib keladi. Bundan tashqari, car sinfi berilgan tezlik uchun bir necha xususiyatga ega, berilgan avtomobildan foydalanuvchi “drujestvennogo nazvaniya”, shu bilan birga car obekti yangi holatini o‘rnatuvchilar uchun har xil konstruktorlar.

class Car
{
// maksimal tezlik uchun o’zgarmas qiymat berish
public const int MaxSpeed=100;
//avtomobil holati
public int CurrentSpeed {get; set;}
public string PetName{get;set;}
// mashina liniyadan chiqib ketmaydimi?
private bool carIsDead;
//avtomobilda radiopriyomnik bor
private Radio theMusicBox=new Radio();
//konstruktorlar
public Car() {}
public Car(string name, int speed)
{
CurrentSpeed = speed;
PetName =name;
}
public void CrankTunes (bool state)
{
theMusicBox.TurnOn(state);
}
//avtomobilni tekshirish
public void Accelerate(int delta)
{
if(carIsDead)
Console.WriteLine(“{0} is out of order...”,PetName);
else
{
CurrentSpeed+=delta;
If(CurrentSpeed>MaxSpeed)
{Console.WriteLine(“{0} has overheated!”, PetName);
CurrentSpeed=0;
carIsDead=true;}
else
Console.WriteLine(“=>CurrentSpeed={0}”,CurrentSpeed);
}
}
}

Istisnolarni qayta ishlash strukturasi


static void Main(string[args])
{Console.WriteLine(“*****Simple Exception Example *****”);
Console.WriteLine(“=> Creating a car and stepping on it!”);
Car myCar=new Car(“Zippy”,20);
myCar.CrankTunes(true);
for(int i=0;i<10;i++)
myCar.Accelerate(10);
Console.ReadLine();
}
Keying kiritilgan kod natijasi:
***** Simple Exception Example *****
=>Creating a car and stepping on it!
Jamming…
=>CurrentSpeed=30
=>CurrentSpeed=40
=>CurrentSpeed=50
=>CurrentSpeed=60
=>CurrentSpeed=70
=>CurrentSpeed=80
=>CurrentSpeed=90
=>CurrentSpeed=100
Zippy has overheated!
Zippy is out of order…
Umumiy istisnoning generatsiyasi
Funksional Car sinfi borligida istisno generatsiyasining oddiy usulini endi ko‘rib chiqamiz. Accelerate() ning joriy tadbiq qilinishi xatolik haqida oddiy ma’lumot beradi. Agar chaqiruvchi kod avtomobilni maksimal tezlikka ko‘tarishga intilsa.
Istisnolarni Tugatish
Accelerate() metodi qanchalik istisnolarni generatsiya qilish qobiliyatiga ega bo‘lsa ham, chaqiruvchi kod uni qayta ishlashga tayyor bo‘lishi kerak, ya’ni u kutilmaganda pado bo‘lganda. Istisnolarni generatsiya qiluvchi metodni chaqirishda try/catch blogi ishlatilishi kerak. Istisno obektini tugatgandan so‘ng Uning boshqa a’zolariga detal asosidagi informatsiya muammosi sifatida murojaat qilish mumkin.
Bu detallar asosida nima ish qilish sizga bog‘liq. Bularni maxsus xisobot fayllarida saqlash yoki Windows hodisalar jurnalida yozish mumkin.
// Handle the thrown exception.
public class MyClass {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
}
}
Umuman olganda blok try operatorlar bo‘limini tashkil etadi. Ish davomida ular istisnolarni tashkil etadi. Istisnolar aniqlansa boshqaruv catch blogiga o‘tadi. Boshqa tomondan agar ichki joylashuvdagi try istisnoga kelmasa, catch blogi to‘liq tashlab o‘tiladi va hammasi o‘z joyida qoldiriladi. Quyida berilgan dastur uchun testdagi kirish natijalari ko‘rsatiladi:

Nazorat savollari



  1. Istisnolar va xatoliklar ta’rifini keltiring.

  2. Dasturiy ta'minotni tuzatish texnikasi.

  3. Semantik dasturlash xatolar katalogi

  4. Mantiqiy ifodalarni noto'g'ri shakllantirish va ishlatish.

  5. Mantiqiy analizatorlar.

Download 386.83 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling