Loading...

Исключенияларды иштетүүгө киришүу

 

Көбүнчө каталар программаны аткарууда пайда болушу мүмкүн, бирок сөзсүз түрдө иштеп чыгуучунун күнөөсү менен эмес. Алардын айрымдарын алдын ала көрүү же алдын ала көрүү кыйын, ал тургай кээде мүмкүн эмес. Ошентип, мисалы, файлды өткөрүп жатканда тармак туташуусу күтүлбөгөн жерден үзүлүшү мүмкүн. Мындай жагдайлар өзгөчө учурлар деп аталат.

 

Java тили мындай жагдайларды чечүү үчүн атайын мүмкүнчүлүктөрдү берет. Мындай объекттердин бири - бул аракет... кармоо... акыры куруу. try блогунда өзгөчө жагдай пайда болгондо, башкаруу берилген өзгөчөлүктү иштете ала турган catch блогуна өтөт. Эгерде мындай блок табылбаса, колдонуучуга иштетилбеген өзгөчө билдирүү көрсөтүлөт жана программанын андан аркы аткарылышы токтотулат. Жана мындай токтоо болбошу үчүн try..catch блогун колдонуу керек. Мисалы:int[] numbers = new int[3];

numbers[4]=45;

System.out.println(numbers[4]);

Биздин сандар массивибиз 3 гана элементти камтышы мүмкүн болгондуктан, сандар[4]=45 нускамасы аткарылганда, консоль өзгөчө кырдаалды көрсөтөт жана программа токтотулат. Эми бул өзгөчөлүктү чечүүгө аракет кылалы:

try{

    int[] numbers = new int[3];

    numbers[4]=45;

    System.out.println(numbers[4]);

}

catch(Exception ex){

    

    ex.printStackTrace();

}

System.out.println("Программа аяктады");

try...catch блогун колдонууда try жана catch операторлорунун ортосундагы бардык операторлор биринчи аткарылат. Эгерде try блогунда өзгөчө жагдай пайда болсо, анда кадимки аткаруу тартиби токтоп, catch операторуна өтөт. Демек, программанын аткарылышы сап номерлерине[4]=45; жеткенде, программа токтоп, кармоо блогуна өтөт.

 

Кармоо туюнтмасы төмөнкү синтаксиске ээ: catch (өзгөрмөнүн_түрүнүн өзгөчө_аты). Бул учурда Exception тибиндеги экс өзгөрмө жарыяланат. Бирок, эгерде ыргытылган өзгөчөлүк catch билдирүүсүндө көрсөтүлгөн түрдөгү өзгөчөлүк болбосо, анда ал иштетилбейт жана программа жөн эле илип коёт же ката билдирүүсүн ыргытат.

Бирок Exception түрү бардык өзгөчөлүктөр үчүн базалык класс болгондуктан, catch(Exception ex) оператору дээрлик бардык өзгөчөлүктөргө жооп берет. Бул учурда өзгөчө кырдаалды иштетүү Exception классында аныкталган printStackTrace() ыкмасын колдонуу менен консолго каталарды издөө стектерин басып чыгарууга туура келет.

 

Catch блогу аяктагандан кийин, программа catch блогунан кийинки бардык башка көрсөтмөлөрдү аткаруу менен ишин улантат.

try..catch конструкциясы да finally блогуна ээ болушу мүмкүн. Бирок, бул блок кошумча болуп саналат жана өзгөчө кырдаалды иштетүүдөн чыгарып салууга болот. Finally блогу аракет блогунда өзгөчө кырдаал ташталганбы же жокпу, ага карабастан аткарылат:

try{

    int[] numbers = new int[3];

    numbers[4]=45;

    System.out.println(numbers[4]);

}

catch(Exception ex){

    

    ex.printStackTrace();

}

finally{

    System.out.println("finally блогу");

}

System.out.println("Программа аяктады ");

Бир нече өзгөчөлүктү иштетүү

Java'да өзгөчөлүктөрдүн ар кандай түрлөрү бар жана биз кошумча кармоо блокторун кошуу менен алардын иштөөсүн чектей алабыз:

int[] numbers = new int[3];

try{

    numbers[6]=45;

    numbers[6]=Integer.parseInt("gfd");

}

catch(ArrayIndexOutOfBoundsException ex){

            

    System.out.println("массивтин чегинен тышкары чыгуу");

}

catch(NumberFormatException ex){

            

    System.out.println("Саптан санга которуу катасы ");

}

Эгерде бизде белгилүү бир түрдөгү өзгөчөлүк болсо, анда ал тиешелүү кармоо блогуна өтөт.

 

Билдирүү(Throw) таштоо

Сиз программаңызда өзгөчө кырдаал болгонун билдирүү үчүн ыргытуу операторун колдоно аласыз. Башкача айтканда, бул оператордун жардамы менен биз өзүбүзчө өзгөчө абалды түзүп, аны аткаруу учурунда көтөрө алабыз. Мисалы, биздин программабызга сан киргизилип жатат жана биз сан 30дан көп болсо, өзгөчөлүктү каалайбыз:

package firstapp;

 

import java.util.Scanner;

public class FirstApp {

 

    public static void main(String[] args) {

       

        try{

            Scanner in = new Scanner(System.in);

            int x = in.nextInt();

            if(x>=30){

               throw new Exception("Число х должно быть меньше 30");

           }

        }

        catch(Exception ex){

            

            System.out.println(ex.getMessage());

        }

        System.out.println("Программа аяктады");

    }  

}

Бул жерде, өзгөчө объектти түзүү үчүн, Exception классынын конструктору колдонулат, ага өзгөчө билдирүү жөнөтүлөт. Ал эми эгерде х саны 29дан чоң болсо, анда өзгөчөлүк ыргытылат жана башкаруу кармоо блогуна өтөт.

 

Catch блогунда getMessage() ыкмасын колдонуу менен өзгөчө билдирүүнү ала алабыз.