JavaRush /Java блогу /Random-KY /Javaдагы өзгөчөлүктөр (Java Exception)

Javaдагы өзгөчөлүктөр (Java Exception)

Группада жарыяланган
Күнүмдүк жашоодо кээде биз пландабаган жагдайлар келип чыгат. Мисалы, сиз эртең менен жумушка турасыз, телефонуңузга кубаттагыч издейсиз, бирок жок. Бетиңизди жууш үчүн дааратканага барасыз - суу өчүрүлгөн. Мен машинага отурдум, ал башталбай калды. Бирок адам мындай күтүлбөгөн жагдайларды оңой эле көтөрө алат. Бул макалада биз Java программалары алар менен кандай мамиле кыларын түшүнүүгө аракет кылабыз.

Кандай гана өзгөчөлүктөр java

Программалоо дүйнөсүндө программаны аткарууда каталардын жана күтүлбөгөн кырдаалдардын пайда болушу өзгөчө кырдаал деп аталат. Программада өзгөчөлүктөр колдонуучунун туура эмес аракеттеринин натыйжасында, дискте керектүү ресурстун жоктугунан же тармак аркылуу serverге байланышты жоготуунун натыйжасында пайда болушу мүмкүн. Программаны аткаруу учурундагы өзгөчөлүктөр программалоо каталарынан же APIди туура эмес колдонуудан да келип чыгышы мүмкүн. Биздин дүйнөдөн айырмаланып, программа мындай кырдаалда эмне кылуу керектигин так бorши керек. Java бул максат үчүн өзгөчө механизмди камсыз кылат.

Кыскача аракет, карма, акыры, ыргыт деген ачкыч сөздөр

Java'да өзгөчөлүктү иштетүү программада төмөнкү ачкыч сөздөрдү колдонууга негизделген:
  • try - өзгөчө учур болушу мүмкүн болгон code блогун аныктайт;
  • catch – өзгөчө жагдай иштетилген code блогун аныктайт;
  • акырында – code блогун аныктайт, ал милдеттүү эмес, бирок эгер бар болсо, аракет блогунун жыйынтыгына карабастан, баары бир аткарылат.
Бул ачкыч сөздөр программа codeунда атайын иштетүү конструкцияларын түзүү үчүн колдонулат: try{}карт, аракет{}кармап{}акыры, аракет{}акыры{}.
  • ыргытуу – өзгөчөлүктү көтөрүү үчүн колдонулат;
  • ыргытат - метод кол тамгаларында метод өзгөчөлүктү ташташы мүмкүн экендигин эскертүү үчүн колдонулат.
Java программасында ачкыч сөздөрдү колдонуунун мисалы:
//method reads a string from the keyboard

public String input() throws MyException {//warn with throws,
// that the method can throw MyException
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
// in the try block we enclose the code in which an exception can occur, in this
// if the compiler tells us that the readLine() method of the class
// BufferedReader may throw an I/O exception
    try {
        s = reader.readLine();
// in the catch block we enclose the code for handling the IOException exception
    } catch (IOException e) {
        System.out.println(e.getMessage());
// close the read stream in the finally block
    } finally {
// when closing the stream, an exception is also possible, for example, if it was not opened, so we “wrap” the code in a try block
        try {
            reader.close();
// write exception handling when closing the read stream
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    if (s.equals("")) {
// we decided that an empty string could disrupt the work of our program in the future, for example, on the result of this method, we need to call the substring(1,2) method, so we are forced to interrupt the program execution with the generation of our exception type MyException using throw
        throw new MyException("String can not be empty!");
    }
    return s;
}

Эмне үчүн бизге өзгөчө механизм керек?

Келгиле, чыныгы дүйнөлүк мисалды карап көрөлү. Элестеткиле, трассада жүк көтөрүмдүүлүгү чектелген авариялык көпүрө бар участок бар. Массасы көпүрөнүн көтөрүмдүүлүгүнөн ашкан унаа өтүп кетсе, ал кулап, айдоочунун абалы жумшак айтканда өзгөчө болуп калышы мүмкүн. Мындай болбошу үчүн жол кызматы алдын ала жолго эскертүүчү белгилерди орнотушат. Автоунаанын айдоочусу эскертүү белгисине карап, унаасынын салмагын көпүрөдө жүрүүгө уруксат берилген салмак менен салыштырат. Андан ашып кетсе, айланма жолго чыгат. Жол кызматынын иш-аракеттеринин аркасында жүк ташуучу унаалардын айдоочуларына биринчиден, каттамдарын алдын ала өзгөртүүгө мүмкүнчүлүк түзүлсө, экинчиден, негизги каттамдагы кооптуулугу тууралуу эскертorп, акырында колдонууга мүмкүн эместиги эскертилди. белгилүү бир шарттарда көпүрө.
Исключения в Java - 2
Программадагы өзгөчө кырдаалдын алдын алуу жана аны улантуу үчүн чечүү мүмкүнчүлүгү Java'да өзгөчө кырдаалдарды колдонуунун себептеринин бири болуп саналат. Өзгөчө механизм ошондой эле сиз жазган codeду (программалоо интерфейси) кирүүчү маалыматтарды текшерүү (текшерүү) аркылуу колдонуучу тарабынан туура эмес колдонуудан коргоого мүмкүндүк берет. Эми бир секунд МАИ болуп кетели. Биринчиден, сиз айдоочулар кыйынчылыкка кабылышы мүмкүн болгон жерлерди бorшиңиз керек. Экинчиден, эскертүү белгилерин даярдап, орнотуу керек. Акырында негизги каттамда кооптуу учурда айланма жолдорду камсыз кылуу керек. Javaда өзгөчө механизм ушундай эле жол менен иштейт. Программаны иштеп чыгуу стадиясында try{} блогунун жардамы менен codeдун кооптуу бөлүмдөрүн өзгөчө кырдаалдардан "коргообуз", catch{} блогунун жардамы менен "резервдик" жолдорду камсыз кылабыз жана акыры{} блогунда биз codeду жазабыз, ал блокто аткарылат. кандайдыр бир натыйжа үчүн программа. Эгерде биз “шашылыш маршрутту” камсыздай албасак же атайылап тандоону колдонуучуга калтыргыбыз келсе, биз аны жок дегенде коркунуч жөнүндө эскертишибиз керек. Неге? Жолдо бир да эскертүү белгисин көрбөй туруп өтө албай турган авариялык көпүрөгө жеткен айдоочунун ачуусун элестетип көрүңүз! Программалоодо, класстарыбызды жана методдорубузду жазып жатканда, биз алардын программаларында башка иштеп чыгуучулар тарабынан колдонулушунун контекстти ар дайым алдын ала көрө албайбыз, ошондуктан өзгөчө кырдаалды чечүү үчүн 100% туура жолду алдын ала көрө албайбыз. Ошол эле учурда, биздин codeдун колдонуучуларын өзгөчө жагдайлар жөнүндө эскертүү жакшы практика болуп саналат. Java'нын өзгөчө механизми муну ыргытууларды колдонуу менен жасоого мүмкүндүк берет — негизи биздин методубуздун өзгөчө учурду ыргытуу үчүн жалпы жүрүм-турумун жарыялоо, ошону менен Java'да өзгөчө кырдаалды иштетүү үчүн code жазуу ыкмасын колдонуучуга калтырат.

"Кыйынчылык" жөнүндө эскертүү

Методуңузда өзгөчө кырдаалды чечүүнү пландабасаңыз, бирок колдонуучуларга мүмкүн болгон өзгөчө кырдаалдар жөнүндө эскертүүнү кааласаңыз, throws ачкыч сөзүн колдонуңуз. Метод колтамгасындагы бул ачкыч сөз белгилүү бир шарттарда метод өзгөчөлүктү ташташы мүмкүн дегенди билдирет. Бул эскертүү метод интерфейсинин бир бөлүгү болуп саналат жана колдонуучуга өзгөчө кырдаалды иштеткичтин ишке ашырылышын өзгөчөлөштүрүү укугун берет. Ыргыткандан кийин биз ыргытылган өзгөчөлүктүн түрүн көрсөтөбүз. Булар көбүнчө Java Exception классынын урпактары . Java an objectиге багытталган тил болгондуктан, Javaдагы бардык өзгөчөлүктөр an object болуп саналат.
Исключения в Java - 3

Java Exception иерархиясы

Программаны аткаруу учурунда ката пайда болгондо, JVM иштөө убактысы Java өзгөчө иерархиясынан талап кылынган типтеги an objectти түзөт - жалпы "ата-бабадан" мураска алынган мүмкүн болгон өзгөчөлүктөрдүн жыйындысы - Throwable класс. Программада пайда болгон өзгөчө кырдаалдарды эки топко бөлүүгө болот:
  1. Программанын андан ары нормалдуу иштешин калыбына келтирүү мүмкүн болбогон жагдайлар
  2. Калыбына келтирүү мүмкүн.
Биринчи топ Ката классынан мураска калган өзгөчөлүктөр пайда болгон кырдаалдарды камтыйт . Бул JVM иштебей калышынын, эс тутумдун толуп кетишинин же системанын бузулушунун натыйжасында программаны аткаруу учурунда пайда болгон каталар. Алар, адатта, программалык камсыздоонун жардамы менен чечилбей турган олуттуу көйгөйлөрдү көрсөтүп турат. Javaдагы өзгөчөлүктүн бул түрү компиляция баскычында текшерилбеген катары классификацияланат. Бул топко RuntimeException да кирет - өзгөчө кырдаалдар, программаны аткаруу учурунда JVM тарабынан түзүлгөн Exception классынын мураскорлору. Алар көбүнчө программалоо каталарынан келип чыгат. Бул өзгөчөлүктөр компиляция убагында да белгиленбейт, андыктан аларды иштетүү үчүн code жазуу зарыл эмес. Экинчи топко программаны жазуу стадиясында каралган жана иштетүү codeу жазылууга тийиш болгон өзгөчө кырдаалдар кирет. Мындай өзгөчөлүктөр текшерилет. Java иштеп чыгуучунун өзгөчө учурларды чечүүдө негизги жумушу ушундай жагдайларды чечүү болуп саналат.

Exception түзүү

Программанын аткарылышынын жүрүшүндө, JVM тарабынан же кол менен ыргытуу операторунун жардамы менен өзгөчө учур чыгарылат . Бул эстутумда өзгөчө an objectти жаратат жана негизги программа codeунун аткарылышын үзгүлтүккө учуратат, ал эми JVM өзгөчөлүктү иштетүүчү өзгөчө кырдаалды иштетүүнүн жолун табууга аракет кылат.

Exception Handling

Java'да өзгөчөлүктү иштетүүнү камсыз кылган code блокторун түзүү try{}catch, try{}catch{}finally, try{}finally{} конструкцияларын колдонуу менен программада ишке ашырылат.
Исключения в Java - 4
Кыйынчылык блогунда өзгөчө кырдаал көтөрүлгөндө, өзгөчө абалды иштеткич кийинки кармоо блогунда изделет. Эгерде кармоодо ушул түрдөгү өзгөчөлүк үчүн иштеткич бар болсо, башкаруу ага өтөт. Болбосо, JVM ылайыктуу кармагыч табылганга чейин ыкма чакырыктарынын тизмегинен ошол өзгөчө түр үчүн иштеткичти издейт. Кармап алуу блогу аткарылгандан кийин, башкаруу кошумча акыркы блокко өткөрүлөт . Эгерде ылайыктуу кармоо блогу табылбаса, JVM программанын аткарылышын токтотот жана метод чалууларынын стекин көрсөтөт - stack trace , эгерде бар болсо, акыркы блок codeун мурда аткарган. Өзгөчөлөштүрүүнүн мисалы:
public class Print {

     void print(String s) {
        if (s == null) {
            throw new NullPointerException("Exception: s is null!");
        }
        System.out.println("Inside method print: " + s);
    }

    public static void main(String[] args) {
        Print print = new Print();
        List list= Arrays.asList("first step", null, "second step");

        for (String s:list) {
            try {
                print.print(s);
            }
            catch (NullPointerException e) {
                System.out.println(e.getMessage());
                System.out.println("Exception was processed. Program continues");
            }
            finally {
                System.out.println("Inside bloсk finally");
            }
            System.out.println("Go program....");
            System.out.println("-----------------");
        }

    }
    }
Негизги методдун натыйжалары :
Inside method print: first step
Inside bloсk finally
Go program....
-----------------
Exception: s is null!
Exception was processed. Program continues
Inside bloсk finally
Go program....
-----------------
Inside method print: second step
Inside bloсk finally
Go program....
-----------------
Блок finallyадатта аракет блогунда ачылган агымдарды жабуу же ресурстарды бошотуу үчүн колдонулат. Бирок, программа жазууда бардык ресурстардын жабылышын эсепке алуу дайыма эле мүмкүн боло бербейт. Жашообузду жеңилдетүү үчүн Java иштеп чыгуучулары бизге try-with-resourcesаракет блогунда ачылган ресурстарды автоматтык түрдө жапкан конструкцияны сунушташты. Биздин биринчи мисалды мындайча кайра жазууга болот try-with-resources:
public String input() throws MyException {
    String s = null;
    try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
        s = reader.readLine();
   } catch (IOException e) {
       System.out.println(e.getMessage());
   }
    if (s.equals("")){
        throw new MyException ("String can not be empty!");
    }
    return s;
}
7-versionсынан баштап Java мүмкүнчүлүктөрүнүн аркасында биз ар кандай өзгөчөлүктөрдү кармоону бир блокто айкалыштыра алабыз, бул codeду компакттуу жана окула турган кылуу. Мисалы:
public String input() {
    String s = null;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
        s = reader.readLine();
        if (s.equals("")) {
            throw new MyException("String can not be empty!");
        }
    } catch (IOException | MyException e) {
        System.out.println(e.getMessage());
    }
    return s;
}

Жыйынтыктар

Java'да өзгөчөлүктөрдү колдонуу бизге "камдык" жолдорду колдонуу аркылуу программанын катачылыкка чыдамдуулугун жогорулатууга, кармоо блокторун колдонуу аркылуу негизги codeдун логикасын өзгөчөлүктөрдү иштетүү codeунан бөлүүгө мүмкүндүк берет, ошондой эле бизге ыргытууларды колдонуу менен биздин codeдун колдонуучусуна өзгөчө кырдаалдарды башкарууну өткөрүп берүү мүмкүнчүлүгү.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION