JavaRush /Java blogi /Random-UZ /Istisnolar va ularga ishlov berish
articles
Daraja

Istisnolar va ularga ishlov berish

Guruhda nashr etilgan
Istisnolar yoki istisno holatlar (holatlar) - bu dasturda uning ishlashi paytida yuzaga keladigan xatolar. Java-dagi barcha istisnolar ob'ektlardir. Shuning uchun ular faqat favqulodda vaziyat yuzaga kelganda avtomatik ravishda yaratilishi mumkin emas, balki ishlab chiquvchining o'zi tomonidan ham yaratilishi mumkin. Istisno sinflar ierarxiyasi: Istisnolar va ularga ishlov berish - 1Istisnolar bir nechta sinflarga bo'lingan, ammo ularning barchasi umumiy ajdodga ega - sinf Throwable. Uning avlodlari kichik sinflar Exceptionva Error. Istisnolar ( Exceptions) dasturdagi muammolarning natijasi bo'lib, ular printsipial jihatdan echilishi va bashorat qilinishi mumkin. Masalan, butun sonlarda nolga bo'linish sodir bo'ldi. Xatolar ( Errors) jiddiyroq muammolar boʻlib, Java spetsifikatsiyasi oʻz dasturingizda ishlashga urinmasligingizni bildiradi, chunki ular JVM darajasidagi muammolardir. Masalan, virtual mashinada mavjud bo'lgan xotira tugasa, bunday istisnolar yuzaga keladi. Dastur hali ham JVM uchun qo'shimcha xotira bilan ta'minlay olmaydi. Java-da barcha istisnolar uch turga bo'linadi: tekshirilgan istisnolar ( checked) va tekshirilmagan istisnolar ( unchecked) xatolar ( Errors) va ish vaqti istisnolari ( RuntimeExceptionssinf avlodi Exception). Boshqariladigan istisnolar - bu dasturda ishlov berilishi mumkin bo'lgan va bajarilishi kerak bo'lgan xatolar; sinfning barcha avlodlari Exception(lekin emas RuntimeException) bu turga tegishli. Istisnolarni qayta ishlash operatorlar yordamida amalga oshirilishi try…catchyoki dasturning tashqi qismiga o'tkazilishi mumkin. Misol uchun, usul qo'ng'iroqlar ierarxiyasida yuqori bo'lgan istisnolarni o'zi ishlatmasdan o'tkazishi mumkin. Belgilanmagan istisnolar ishlov berishni talab qilmaydi, lekin agar xohlasangiz, sinf istisnolarini boshqarishingiz mumkin RuntimeException. Keling, quyidagi dasturni kompilyatsiya qilamiz va ishga tushiramiz:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Ishga tushganda, konsolda quyidagi xabar ko'rsatiladi:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Xabar yuzaga kelgan istisno sinfini ko'rsatadi - ArithmeticException. Ushbu istisnoni hal qilish mumkin:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Endi, standart xato xabari o'rniga blok bajariladi catch, uning parametri istisnoga mos keladigan sinfning e ob'ektidir (ob'ektning o'ziga istalgan nom berilishi mumkin, agar biz majburan tashlamoqchi bo'lsak, kerak bo'ladi. bu istisno yana, masalan, boshqa ishlov beruvchi tekshirilishi uchun). Bunday holda, blokda tryistisno yuzaga kelishi mumkin bo'lgan dasturning fragmenti mavjud. Har xil istisno sinflari bilan bir trynechta catch bloklariga mos kelishi mumkin.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
Agar taqdim etilgan dasturni ishga tushirgandan so'ng, foydalanuvchi 1 yoki 2-klaviaturadan kirsa, dastur hech qanday istisnolar yaratmasdan ishlaydi. Agar foydalanuvchi 0 ni kiritsa, sinfdan istisno paydo bo'ladi ArithmeticExceptionva birinchi blok tomonidan boshqariladi catch. Agar foydalanuvchi 3 ni kiritsa, sinfdan istisno paydo bo'ladi ArrayIndexOutOfBoundsException(massiv chegaradan tashqarida) va u ikkinchi blok tomonidan qayta ishlanadi catch. Agar foydalanuvchi butun son bo'lmagan raqamni kiritsa, masalan, 3.14, u holda sinf istisnosi InputMismatchException(kirish turi nomuvofiqligi) yuzaga keladi va u standart xato formatida tashlanadi, chunki biz uni hech qanday tarzda ishlatmadik. Biroq, siz sinf uchun ishlov beruvchini qo'shishingiz mumkin Exception, chunki bu sinf boshqa barcha tekshirilgan istisnolar uchun ota-sinf bo'lib, u ulardan har qandayini (jumladan, ) ushlaydi InputMismatchException.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Howое-то исключение");
        }
    }
}
Istisnolar sinflar va kichik sinflar ierarxiyasiga asoslanganligi sababli, avvalo aniqroq istisnolarni, keyin esa umumiyroq holatlarni ko'rib chiqishga harakat qilishingiz kerak. Ya'ni, agar biz blokni birinchi bo'lib (uchinchi emas) istisnolar bilan ishlash bilan joylashtirsak Exception, biz hech qachon "Ba'zi istisnolar yuz berdi" dan boshqa xato xabarlarini ko'rmaymiz (barcha istisnolar ushbu blok tomonidan darhol ushlanib qoladi va unga etib bormaydi). boshqalar). Bloklarga ixtiyoriy qo'shimcha try…catchblok bo'lishi mumkin finally. Unga joylashtirilgan buyruqlar istisno sodir bo'ladimi yoki yo'qmi, har qanday holatda ham bajariladi. Ishlamaydigan istisno yuzaga kelganda, dasturning ushbu istisno yaratilgandan keyin qolgan qismi bajarilmaydi. Misol uchun, ba'zi uzoq hisob-kitoblar paytida istisno yuzaga kelgan bo'lsa, finallysiz oraliq natijalarni blokda ko'rsatishingiz yoki saqlashingiz mumkin. Manbaga havola: Istisnolar va ularni qayta ishlash
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION