JavaRush /Java Blog /Random-TK /Java-da kadadan çykmalar (Java kadadan çykma)

Java-da kadadan çykmalar (Java kadadan çykma)

Toparda çap edildi
Gündelik durmuşda käwagt meýilleşdirmedik ýagdaýlarymyz ýüze çykýar. Mysal üçin, irden işe turýarsyňyz, telefonyňyz üçin zarýad beriji gözläň, ýöne ýok. Vanna ýüzüňizi ýuwmak üçin gidýärsiňiz - suw öçürildi. Maşyna mündim, ol başlamaz. Emma adam şeýle garaşylmadyk ýagdaýlara aňsatlyk bilen çydap bilýär. Bu makalada Java programmalarynyň olar bilen nähili işleşýändigini anyklamaga synanyşarys.

Kadadan çykmalar näme?

Programmirleme dünýäsinde programma ýerine ýetirilende ýalňyşlyklaryň we garaşylmadyk ýagdaýlaryň ýüze çykmagy kadadan çykma diýilýär. Programmada, ulanyjylaryň nädogry hereketleri, diskde zerur çeşmäniň ýoklugy ýa-da torda serwere birikmäniň ýitmegi netijesinde kadadan çykmalar bolup biler. Programmanyň ýerine ýetirilişindäki kadadan çykmalar programmirleme ýalňyşlyklary ýa-da API-ni nädogry ulanmak bilen hem bolup biler. Dünýämizden tapawutlylykda, programma şeýle ýagdaýda näme etmelidigini anyk bilmelidir. Java bu maksat bilen kadadan çykma mehanizmini üpjün edýär.

Açar sözler hakda gysgaça synap görüň, tutuň, ahyrsoňy zyňyň

Java-da kadadan çykma programmada aşakdaky açar sözleriň ulanylmagyna esaslanýar:
  • synap görüň - kadadan çykma bolup biljek kod toplumyny kesgitleýär;
  • tutmak - kadadan çykma koduny kesgitleýär;
  • ahyrynda - islege bagly kod blokyny kesgitleýär, ýöne bar bolsa, synanyşygyň netijelerine garamazdan her niçigem bolsa ýerine ýetirilýär.
Bu açar sözler, programma kodynda ýörite gaýtadan işleýiş gurluşlaryny döretmek üçin ulanylýar: {} tutmaga synanyşyň,}} tutmaga synanyşyň} ahyrsoňy synap görüň, ahyrsoňy {} synap görüň.
  • zyňmak - kadadan çykma üçin ulanylýar;
  • zyňmak - usulyň kadadan çykmagynyň mümkindigini duýdurmak üçin usul gollarynda ulanylýar.
Java programmasynda açar sözleri ulanmagyň mysaly:
//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;
}

Näme üçin kadadan çykma mehanizmi gerek?

Hakyky dünýä mysalyna seredeliň. Uly ýolda çäkli ýük göterijiligi bolan gyssagly köpri bolan bölümiň bardygyny göz öňüne getiriň. Köpçüligiň göterijilik ukybyndan ýokary bolan ulag onuň üstünden geçse, ýykylyp, sürüjiniň ýagdaýy ýumşak, adatdan daşary ýagdaý bolup biler. Munuň ýüze çykmazlygy üçin ýol gullugy ýolda duýduryş belliklerini öňünden goýýar. Awtoulagyň sürüjisi, duýduryş belgisine seredip, awtoulagynyň agramyny köprüde sürmäge rugsat berýän bilen deňeşdirer. Ondan ýokary bolsa, aýlanar. Serviceol hyzmatynyň hereketleri netijesinde, ilkinji nobatda, ýük awtoulag sürüjilerine marşrutlaryny öňünden üýtgetmek mümkinçiligi berildi, ikinjiden, esasy ugurdaky howp barada duýduryş berildi we ahyrsoňunda ulanmagyň mümkin däldigi barada duýduryş berildi. belli bir şertlerde köpri.
Исключения в Java - 2
Programmada kadadan çykmanyň öňüni almak we çözmek ukyby, Java-da kadadan çykmalary ulanmagyň sebäplerinden biridir. Kadadan çykma mehanizmi, ýazýan koduňyzy (programmirleme interfeýsi) ulanyjy tarapyndan gelýän maglumatlary barlamak (barlamak) arkaly nädogry ulanmakdan goramaga mümkinçilik berýär. Indi bir sekuntlyk ýol polisiýasy bolalyň. Ilki bilen awtoulag sürüjileriniň kynçylyk çekip biljek ýerlerini bilmeli. Ikinjiden, duýduryş belliklerini taýýarlamaly we gurmaly. Netijede, esasy ugurda howp dörän halatynda aýlaw ýollaryny üpjün etmeli. Java-da kadadan çykma mehanizmi hem edil şonuň ýaly işleýär. Programmany işläp düzmek tapgyrynda, synanyşyk}} blokuny ulanyp, kodlaryň howply bölümlerini “goraýarys”, tutmak {} blokuny ulanyp “ätiýaçlyk” ýollaryny üpjün edýäris we ahyrynda {} blokda ýerine ýetirilen kod ýazýarys. islendik netije üçin programma. “Gyssagly ýol” berip bilmeýän ýa-da bilgeşleýin ulanyja saýlawy goýmak isleýän ýagdaýlarymyzda, iň bolmanda oňa howp barada duýduryş bermelidiris. Näme üçin? Alongolda ýekeje duýduryş belgisine-de duş gelmän sürüp bolmajak gyssagly köprä ýetjek sürüjiniň gazabyny göz öňüne getiriň! Programmirlemekde, synplarymyzy we usullarymyzy ýazanymyzda, beýleki programmaçylar tarapyndan öz programmalarynda ulanylyşynyň mazmunyny hemişe öňünden görüp bilmeris, şonuň üçin kadadan çykma ýagdaýyny çözmek üçin 100% dogry ýoly görüp bilmeris. Şol bir wagtyň özünde, kodumyzyň ulanyjylaryna kadadan çykma mümkinçiligi barada duýduryş bermek gowy tejribe. Java-yň kadadan çykma mehanizmi, zyňmak arkaly muny amala aşyrmaga mümkinçilik berýär - esasanam kadadan çykma usulymyzyň umumy özüni alyp barşyny yglan edýär we şeýlelik bilen Java-da kadadan çykma üçin kod ýazmak usulyny ulanyjynyň ygtyýaryna berýär.

"Kynçylyk" duýduryşy

Usulyňyzda bir kadadan çykma meýilleşdirmeýän bolsaňyz, ýöne mümkin bolan kadadan çykma ýagdaýlary barada ulanyjylara duýduryş bermek isleseňiz, atyş açar sözüni ulanyň. Usul golundaky bu açar söz, käbir şertlerde usulyň kadadan çykma bolup biljekdigini aňladýar. Bu duýduryş usul interfeýsiniň bir bölegi bolup, ulanyja kadadan çykma işleýşini özleşdirmek hukugyny berýär. Zyňylandan soň zyňylýan kadadan çykma görnüşini görkezýäris. Bular köplenç Java Expression synpynyň nesilleri . Java obýekte gönükdirilen dil bolansoň, Java-da ähli kadadan çykmalar obýektlerdir.
Исключения в Java - 3

Java kadadan çykma iýerarhiýasy

Programma ýerine ýetirilende ýalňyşlyk ýüze çykanda, JVM iş wagty Java kadadan çykma iýerarhiýasyndan zerur görnüşdäki obýekti döredýär - umumy “ata-babadan” - Zyňylýan synpdan miras galan mümkin bolan kadadan çykmalar toplumy. Programmada ýüze çykýan aýratyn ýagdaýlary iki topara bölmek bolar:
  1. Programmanyň mundan beýläkki kadaly işlemegini dikeltmek mümkin däl ýagdaýlar
  2. Dikeltmek mümkin.
Birinji topara roralňyşlyk synpyndan miras galan kadadan çykmalar ýüze çykan ýagdaýlar girýär . Bular JVM näsazlygy, ýadyň aşmagy ýa-da ulgamyň çökmegi netijesinde programma ýerine ýetirilende ýüze çykýan ýalňyşlyklar. Adatça programma üpjünçiligini ulanyp düzedip bolmajak çynlakaý problemalary görkezýärler. Java-da bu kadadan çykma görnüşi, jemleýiş tapgyrynda barlanmadyk toparlara bölünýär. Bu topara RuntimeException hem girýär - kadadan çykmalar, programma ýerine ýetirilende JVM tarapyndan döredilen kadadan çykmalar. Köplenç programmirleme ýalňyşlyklary sebäpli ýüze çykýar. Bu kadadan çykmalar düzülen wagty hem barlanmaýar, şonuň üçin olary dolandyrmak üçin kod ýazmak hökman däl. Ikinji topara, programma ýazmak tapgyrynda göz öňünde tutulýan we gaýtadan işlemek kody ýazylmaly aýratyn ýagdaýlar girýär. Şeýle kadadan çykmalar barlanýar. Kadadan çykmalar bilen iş salyşanda Java dörediji işiniň esasy bölegi şeýle ýagdaýlary çözmekdir.

Kadadan çykma döretmek

Programma ýerine ýetirilende, JVM tarapyndan kadadan çykma ýa-da zyňmak beýany ulanylýar . Bu ýatda kadadan çykma obýektini döredýär we esasy programma kodunyň ýerine ýetirilmegini kesýär, JVM kadadan çykaryjy kadadan çykma usulyny tapmaga synanyşýar.

Kadadan çykma

Java-da kadadan çykma üpjün edýän kod bloklaryny döretmek programmada {} tutmak, synamak {} tutmak {} ahyry, {} ahyrynda {} konstruksiýalary ulanyp amala aşyrylýar.
Исключения в Java - 4
Synag blokynda kadadan çykma ýüze çykanda, kadadan çykaryjy aşakdaky tutma blokynda gözlenýär. Tutmakda bu kadadan çykma görnüşi bar bolsa, gözegçilik oňa geçýär. Notok bolsa, JVM amatly tutma tapylýança usul jaňlarynyň zynjyryndaky şol kadadan çykma görnüşi üçin işleýji gözleýär. Tutmak bloky ýerine ýetirilenden soň, dolandyryş ahyrky bloklara geçirilýär . Amatly tutmak bloky tapylmasa, JVM programmanyň ýerine ýetirilmegini togtadýar we bir topar usul çagyryşyny görkezýär - eger yzda bar bolsa, ahyrky blok koduny ýerine ýetiripdi. Kadadan çykma meselesi:
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("-----------------");
        }

    }
    }
Esasy usulyň netijeleri :
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....
-----------------
Blok, finallyadatça synag blokynda açylan akymlary ýapmak ýa-da çeşmeleri boşatmak üçin ulanylýar. Şeýle-de bolsa, programma ýazylanda ähli çeşmeleriň ýapylmagyny yzarlamak hemişe mümkin däl. Durmuşymyzy aňsatlaşdyrmak üçin Java döredijiler bize try-with-resourcessynag blokynda açylan çeşmeleri awtomatiki ýapýan gurluş hödürlediler. Ilkinji mysalymyzy şeýle ýazyp bileris 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;
}
“Java” -yň 7-nji wersiýasyndan başlap, mümkinçilikleri sebäpli, bir blokda dürli kadadan çykmalary birleşdirip, kody has ykjam we okalýan edip bileris. Mysal üçin:
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;
}

Netijeler

Java-da kadadan çykmalar ulanmak, “ätiýaçlyk” ýollary ulanmak arkaly programmanyň ýalňyş çydamlylygyny ýokarlandyrmaga, esasy koduň logikasyny tutma bloklaryny ulanmak arkaly kadadan çykma kodundan aýyrmaga mümkinçilik berýär, şeýle hem bize ygtyýar bermäge mümkinçilik berýär. zyňmak arkaly kodumyzyň ulanyjysyna kadadan çykma.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION