JavaRush /Java Blog /Random-TK /Kadadan çykmalar we olaryň ulanylyşy
articles
Dereje

Kadadan çykmalar we olaryň ulanylyşy

Toparda çap edildi
Kadadan çykmalar ýa-da aýratyn ýagdaýlar (ştatlar) programmanyň işleýşinde ýüze çykýan ýalňyşlyklardyr. Java-da ähli kadadan çykmalar obýektlerdir. Şonuň üçin diňe bir adatdan daşary ýagdaý ýüze çykanda awtomatiki usulda däl, eýsem döredijiniň özi hem döredip biler. Kadadan çykma synplarynyň iýerarhiýasy: Kadadan çykmalar we olaryň ulanylyşy - 1Kadadan çykmalar birnäçe klasa bölünýär, ýöne olaryň hemmesiniň umumy atasy - synpy bar Throwable. Onuň nesilleri kiçi klasslar Exceptionwe Error. Kadadan çykmalar ( Exceptions), esasan, çözüp bolýan we öňünden aýdyp boljak programmadaky meseleleriň netijesidir. Mysal üçin, nula bölmek bitewi sanlarda ýüze çykdy. Rorsalňyşlyklar ( Errors), Java spesifikasiýasynda öz programmaňyzda işlemäge synanyşmaly däldigiňizi görkezýän has çynlakaý meseleler, sebäbi olar JVM derejesindäki meseleler. Mysal üçin, wirtual maşynda bar bolan ýat gutarsa, bu hili kadadan çykmalar bolýar. Programma henizem JVM üçin goşmaça ýat berip bilmez. Java-da ähli kadadan çykmalar üç görnüşe bölünýär: barlanylan kadadan çykmalar ( checked) we ýalňyşlyklar () we iş wagtyndaky kadadan çykmalar ( synp nesli ) uncheckedbarlanylýan barlanmadyk kadadan çykmalar (). Gözegçilik edilýän kadadan çykmalar, programmada çözülip bilinjek ýalňyşlyklardyr; synpyň ähli nesilleri (ýöne däl ) bu görnüşe degişlidir. Kadadan çykma amallary operatorlaryň kömegi bilen edilip ýa-da programmanyň daşarky bölegine geçirilip bilner. Mysal üçin, bir usul, jaň iýerarhiýasynda has ýokary bolup geçýän kadadan çykmalary özi alyp barmazdan geçip biler. Barlanmadyk kadadan çykmalar işlemegi talap etmeýär, ýöne isleseňiz synp kadadan çykmalaryny dolandyryp bilersiňiz . Aşakdaky programmany düzeliň we işledeliň: ErrorsRuntimeExceptionsExceptionExceptionRuntimeExceptiontry…catchRuntimeException
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Işe goýberilende konsolda aşakdaky habar görkeziler:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Habarda bolup geçen kadadan çykma synpy görkezilýär - ArithmeticException. Bu kadadan çykma çözülip bilner:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Indi adaty ýalňyşlyk habarynyň ýerine bir blok ýerine ýetiriler catch, onuň parametri kadadan çykma synpynyň obýekti (obýektiň özüne islendik at berilip bilner, zor bilen zyňmak islesek zerur bolar) bu kadadan çykma, meselem, başga bir işleýjiniň barlanmagy üçin). Bu ýagdaýda blokda trykadadan çykma bolup biljek programmanyň bölegi bar. tryDürli kadadan çykma synplary bolan birnäçe tutuş bloklara gabat gelip biler .
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("Обращение по недопустимому индексу массива");
        }
    }
}
Tanyşdyrylan programmany işe girizensoň, ulanyjy 1 ýa-da 2 klawiaturadan girse, programma hiç hili kadadan çykma bolmazdan işlär. Ulanyjy 0-a girse, synpdan başga ýagdaý ýüze çykar ArithmeticExceptionwe birinji blok tarapyndan dolandyrylar catch. Ulanyjy 3-e girse, synpda kadadan çykma ýüze çykar ArrayIndexOutOfBoundsException(çäksiz tertip) we ikinji blok tarapyndan işlener catch. Ulanyjy bitewi däl belgini, meselem, 3.14 girizse, synpda kadadan çykma ýüze çykar InputMismatchException(giriş görnüşiniň gabat gelmezligi) we adaty ýalňyşlyk görnüşinde atylar, sebäbi biz hiç hili iş etmedik. Şeýle-de bolsa, synp üçin işleýjini goşup bilersiňiz Exception, sebäbi bu synp beýleki barlanylan kadadan çykmalar üçin esasy synp bolansoň, olaryň haýsydyr birini tutar (şol sanda 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ое-то исключение");
        }
    }
}
Kadadan çykmalar synplaryň we kiçi toparlaryň iýerarhiýasynda gurlanlygy sebäpli, ilki bilen has anyk kadadan çykmalary, soň bolsa has umumylary çözmäge synanyşmaly. Theagny, bloky ilki bilen (we üçünji däl) synpy kadadan çykarmak bilen ýerleşdiren bolsak Exception, “Käbir kadadan çykmalar ýüze çykdy” -dan başga hiç hili ýalňyş habar görmeris (ähli kadadan çykmalar derrew şu blok tarapyndan tutular we ýetip bilmezdi beýlekiler). Bloklara goşmaça goşmaçalar try…catchblok bolup biler finally. Onda ýerleşdirilen buýruklar, kadadan çykma ýa-da ýoklugyna garamazdan islendik ýagdaýda ýerine ýetiriler. Gözegçilik edilmedik kadadan çykma ýüze çyksa-da, programmanyň bu kadadan çykandan soň galan bölegi ýerine ýetirilmeýär. Mysal üçin, käbir uzyn hasaplamalar wagtynda kadadan çykma ýüze çykan bolsa, finallyaralyk netijeleri bir blokda görkezip ýa-da saklap bilersiňiz. Çeşmä baglanyşyk: Kadadan çykmalar we olaryň ulanylyşy
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION