JavaRush /Java блогы /Random-KK /Ерекшеліктер және оларды өңдеу
articles
Деңгей

Ерекшеліктер және оларды өңдеу

Топта жарияланған
Ерекшеліктер немесе ерекше жағдайлар (күйлер) - бұл бағдарламада оның жұмыс істеуі кезінде пайда болатын қателер. Java тіліндегі барлық ерекшеліктер нысандар болып табылады. Сондықтан олар ерекше жағдай туындаған кезде автоматты түрде ғана емес, сонымен қатар әзірлеушінің өзі де жасай алады. Ерекшелік кластарының иерархиясы: Ерекшеліктер және оларды өңдеу - 1Ерекшеліктер бірнеше сыныптарға бөлінеді, бірақ олардың барлығының ортақ атасы бар - сынып Throwable. Оның ұрпақтары ішкі класстар Exceptionжәне Error. Ерекшеліктер ( Exceptions) негізінен шешілетін және болжауға болатын бағдарламадағы есептердің нәтижесі болып табылады. Мысалы, нөлге бөлу бүтін сандарда орын алды. Қателер ( Errors) - бұл Java спецификациясы JVM деңгейіндегі мәселелер болғандықтан, өз бағдарламаңызда өңдеуге әрекеттенбеу керектігін айтқан аса маңызды мәселелер. Мысалы, егер виртуалды машинада қол жетімді жад таусылған болса, мұндай ерекшеліктер орын алады. Бағдарлама әлі де JVM үшін қосымша жадты қамтамасыз ете алмайды. Java тілінде барлық ерекшеліктер үш түрге бөлінеді: тексерілген ерекшеліктер ( checked) және тексерілмеген ерекшеліктер ( unchecked) қателерді ( Errors) және орындалу уақытының ерекшеліктерін ( RuntimeExceptionsсынып ұрпағы Exception). Басқарылатын ерекшеліктер - бұл бағдарламада өңделуі мүмкін және өңделуі тиіс қателер; сыныптың барлық ұрпақтары Exception(бірақ RuntimeException) осы түрге жатады. Ерекшеліктерді өңдеу операторлардың көмегімен орындалуы мүмкін try…catchнемесе бағдарламаның сыртқы бөлігіне ауыстырылуы мүмкін. Мысалы, әдіс қоңырау иерархиясында жоғарырақ орын алатын ерекшеліктерді өзі өңдемей-ақ жібере алады. Белгіленбеген ерекшеліктер өңдеуді қажет етпейді, бірақ қаласаңыз, сыныптағы ерекше жағдайларды өңдеуге болады RuntimeException. Келесі бағдарламаны құрастырып, іске қосайық:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Іске қосылған кезде консольде келесі хабарлама көрсетіледі:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Хабарлама орын алған ерекшелік сыныбын көрсетеді - ArithmeticException. Бұл ерекше жағдайды өңдеуге болады:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Енді стандартты қате туралы хабардың орнына блок орындалады catch, оның параметрі ерекше жағдайға сәйкес келетін класстың e нысаны болып табылады (an objectінің өзіне кез келген атау берілуі мүмкін, егер біз күштеп лақтырғымыз келсе, ол қажет болады. бұл ерекшелік қайтадан, мысалы, басқа өңдеуші тексерілетін етіп). Бұл жағдайда блокта tryерекше жағдай орын алуы мүмкін бағдарламаның фрагменті болады. tryӘртүрлі ерекшелік кластары бар бірнеше ұстау блоктарына сәйкес келуі мүмкін .
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("Обращение по недопустимому индексу массива");
        }
    }
}
Егер ұсынылған бағдарламаны іске қосқаннан кейін пайдаланушы 1 немесе 2 пернетақтадан енгізсе, бағдарлама ешқандай ерекшелік жасамай жұмыс істейді. Егер пайдаланушы 0 мәнін енгізсе, сыныптан ерекше жағдай орын алады ArithmeticExceptionжәне бірінші блокпен өңделеді catch. Егер пайдаланушы 3-ке кірсе, сыныптан ерекше жағдай орын алады ArrayIndexOutOfBoundsException(массив шекарадан тыс) және ол екінші блокпен өңделеді catch. Егер пайдаланушы бүтін емес санды енгізсе, мысалы, 3.14, онда сыныптан ерекше жағдай орын алады InputMismatchException(енгізу түрінің сәйкессіздігі) және ол стандартты қате пішімінде шығарылады, өйткені біз оны ешбір жолмен өңдемедік. Дегенмен, сынып үшін өңдегішті қосуға болады Exception, өйткені бұл сынып барлық басқа тексерілген ерекшеліктер үшін ата-аналық сынып болып табылады, ол олардың кез келгенін (соның ішінде ) ұстайды 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ое-то исключение");
        }
    }
}
Ерекшеліктер сыныптар мен ішкі сыныптардың иерархиясына құрылғандықтан, алдымен ерекше ерекшеліктерді, содан кейін ғана жалпыламаларды өңдеуге тырысу керек. Яғни, егер біз блокты сыныпты ерекшелікпен өңдеумен бірінші (үшінші емес) орналастырсақ Exception, біз ешқашан «Басқа бір ерекшелік орын алды» дегеннен басқа қате хабарларын көрмейміз (барлық ерекшеліктерді осы блок бірден ұстайды және оған жетпейді. басқалар). Блоктарға қосымша қосымша try…catchблок болуы мүмкін finally. Онда орналастырылған пәрмендер кез келген жағдайда ерекше жағдайдың орын алуына немесе болмауына қарамастан орындалады. Өңделмейтін ерекше жағдай орын алғанына қарамастан, бағдарламаның осы ерекше жағдайды жасағаннан кейін қалған бөлігі орындалмайды. Мысалы, кейбір ұзақ есептеулер кезінде ерекше жағдай орын алса, finallyаралық нәтижелерді блокта көрсетуге немесе сақтауға болады. Дереккөзге сілтеме: Ерекшеліктер және оларды өңдеу
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION