JavaRush /Java блогу /Random-KY /Өзгөчө кырдаалдар жана аларды иштетүү
articles
Деңгээл

Өзгөчө кырдаалдар жана аларды иштетүү

Группада жарыяланган
Өзгөчө жагдайлар же өзгөчө кырдаалдар (мамлекеттер) программанын иштөө учурундагы каталар. Javaдагы бардык өзгөчөлүктөр an object болуп саналат. Ошондуктан, алар өзгөчө кырдаал пайда болгондо гана автоматтык түрдө түзүлбөстөн, иштеп чыгуучунун өзү тарабынан да түзүлүшү мүмкүн. Өзгөчө класстардын иерархиясы: Өзгөчө учурлар жана аларды иштетүү - 1Өзгөчөлөр бир нече класстарга бөлүнөт, бирок алардын бардыгынын жалпы түпкү атасы бар - класс Throwable. Анын тукумдары субкласстар Exceptionжана Error. Өзгөчө жагдайлар ( Exceptions) программадагы көйгөйлөрдүн натыйжасы болуп саналат, алар негизинен чечилүүчү жана алдын ала айтууга болот. Мисалы, нөлгө бөлүнүү бүтүн сандарда болгон. Каталар ( Errors) Java спецификациясында сиз өзүңүздүн программаңызда чечүүгө аракет кылбаңыз деп айтылган олуттуу көйгөйлөр, анткени алар JVM деңгээлиндеги көйгөйлөр. Мисалы, мындай өзгөчөлүктөр виртуалдык машинанын эс тутуму түгөнүп калса болот. Программа дагы эле JVM үчүн кошумча эстутум менен камсыз кыла алbyte. Java-да бардык өзгөчөлүктөр үч түргө бөлүнөт: каталарды ( ) жана иштөө убактысынын өзгөчөлүгүн ( класстын тукуму ) камтыган текшерилген checkedөзгөчөлүктөр ( ) жана текшерилбеген өзгөчөлүктөр ( ). Контролдук өзгөчөлүктөр - бул программада иштетorши мүмкүн болгон жана иштетorши керек болгон каталар; класстын бардык тукумдары (бирок ) ушул түргө таандык. Өзгөчө кырдаалды иштетүү операторлор аркылуу жүргүзүлүшү мүмкүн же программанын тышкы бөлүгүнө өткөрүлүп берorши мүмкүн. Мисалы, ыкма чакырык иерархиясында андан жогору болгон өзгөчөлүктөрдү өзү иштетпестен өткөрүп бере алат. Текшерилбеген өзгөчөлүктөр иштетүүнү талап кылbyte, бирок сиз кааласаңыз, класстык өзгөчөлүктөрдү иштете аласыз . Төмөнкү программаны компиляциялап, иштетели: uncheckedErrorsRuntimeExceptionsExceptionExceptionRuntimeExceptiontry…catchRuntimeException
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иси болуп саналат, өзгөчө жагдайга туура келет (an objectтин өзүнө каалаган ат берorши мүмкүн, эгерде биз күч менен ыргытууну кааласак, ал керек болот. бул өзгөчөлүк дагы бир жолу, мисалы, башка иштеткичти текшерүү үчүн). Бул учурда, блок 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. Анда жайгаштырылган буйруктар кандайдыр бир өзгөчөлүк пайда болобу же жокпу, эч кандай учурда аткарылат. Иштетилбеген өзгөчө кырдаал болгонуна карабастан, программанын бул өзгөчөлүк жаралгандан кийин калган бөлүгү аткарылbyte. Мисалы, кээ бир узак эсептөөлөр учурунда өзгөчө кырдаал болсо, finallyсиз блокто аралык натыйжаларды көрсөтүп же сактай аласыз. Булакка шилтеме: Өзгөчө кырдаалдар жана аларды иштетүү
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION