logo

Išimtys Java

Išimčių tvarkymas „Java“ yra viena iš veiksmingų būdų tvarkyti vykdymo klaidas, kad būtų galima išsaugoti reguliarų programos srautą. „Java Exception Handling“ yra mechanizmas, skirtas tvarkyti vykdymo klaidas, tokias kaip ClassNotFoundException, IOException, SQLException, RemoteException ir kt.

Kas yra „Java“ išimtys?

Java, išimtis yra nepageidaujamas arba netikėtas įvykis, įvykęs programos vykdymo metu, t. y. vykdymo metu, sutrikdantis įprastą programos komandų eigą. Programa gali sugauti ir tvarkyti išimtis. Kai metode atsiranda išimtis, jis sukuria objektą. Šis objektas vadinamas išimties objektu. Jame pateikiama informacija apie išimtį, pvz., išimties pavadinimas ir aprašymas bei programos būsena, kai įvyko išimtis.



Pagrindinės priežastys, kodėl atsiranda išimtis

  • Netinkama vartotojo įvestis
  • Įrenginio gedimas
  • Tinklo ryšio praradimas
  • Fiziniai apribojimai (ne disko atmintis)
  • Kodo klaidos
  • Atidaromas nepasiekiamas failas

Klaidos yra nepataisomos sąlygos, pvz., „Java“ virtualiosios mašinos (JVM) senka atmintis, atminties nutekėjimas, dėklo perpildymo klaidos, bibliotekos nesuderinamumas, begalinė rekursija ir tt Klaidos paprastai negali valdyti programuotojo, todėl neturėtume bandyti tvarkyti klaidų.

Skirtumas tarp klaidos ir išimties

Pakalbėkime apie svarbiausią dalį, kuri yra skirtumai tarp klaidos ir išimties tai yra taip:

  • Klaida: Klaida rodo rimtą problemą, kurios pagrįsta programa neturėtų bandyti sugauti.
  • Išimtis: Išimtis nurodo sąlygas, kurias pagrįsta programa gali bandyti sugauti.

Išimčių hierarchija

Visi išimčių ir klaidų tipai yra klasės poklasiai Metamas , kuri yra pagrindinė hierarchijos klasė. Vienai šakai vadovauja Išimtis . Ši klasė naudojama išskirtinėms sąlygoms, kurias turėtų užfiksuoti vartotojo programos. NullPointerException yra tokios išimties pavyzdys. Kita šaka, Klaida naudoja Java vykdymo laiko sistema ( JVM ), kad nurodytų klaidas, susijusias su pačia vykdymo laiko aplinka (JRE). StackOverflowError yra tokios klaidos pavyzdys.



Išimčių hierarchija Java

Java išimčių hierarchija

Išimčių tipai

Java apibrėžia kelių tipų išimtis, susijusias su įvairiomis jos klasių bibliotekomis. „Java“ taip pat leidžia vartotojams nustatyti savo išimtis.

„Java“ išimčių tipai

Išimtys gali būti suskirstytos dviem būdais:



  1. Integruotos išimtys
    • Patikrinta išimtis
    • Nepažymėta išimtis
  2. Vartotojo nustatytos išimtys

Aptarkime aukščiau nurodytą išimtį, kuri yra tokia:

1. Integruotos išimtys

Integruotos išimtys yra išimtys, kurios galimos „Java“ bibliotekose. Šios išimtys yra tinkamos tam tikroms klaidų situacijoms paaiškinti.

  • Patikrintos išimtys: Patikros išimtys vadinamos kompiliavimo laiko išimtimis, nes kompiliatorius šias išimtis tikrina kompiliavimo metu.
  • Nepažymėtos išimtys: Nepažymėtos išimtys yra priešingos pažymėtoms išimtims. Kompiliatorius netikrins šių išimčių kompiliavimo metu. Paprastais žodžiais tariant, jei programa pateikia nepažymėtą išimtį ir net jei mes jos neapdorotume ar nepaskelbtume, programa nepateiks kompiliavimo klaidos.

Pastaba: Norėdami sužinoti pažymėtą ir nepažymėtą išimtį, žr Patikrintos ir nepažymėtos išimtys

2. Vartotojo nustatytos išimtys:

Kartais „Java“ integruotos išimtys negali apibūdinti tam tikros situacijos. Tokiais atvejais vartotojai taip pat gali sukurti išimtis, kurios vadinamos „vartotojo nustatytomis išimtimis“.

The „Java“ išimčių tvarkymo pranašumai yra tokie:

  1. Numatymas užbaigti programos vykdymą
  2. Lengvas programos kodo ir klaidų valdymo kodo identifikavimas
  3. Klaidų plitimas
  4. Prasmingas klaidų pranešimas
  5. Klaidų tipų nustatymas

Išimties informacijos spausdinimo būdai:

1. printStackTrace()

Šis metodas spausdina išimties informaciją formatu Išimties pavadinimas: išimties aprašymas, dėklo sekimas.

palyginama eilutė

Pavyzdys:

Java




//program to print the exception information using printStackTrace() method> > import> java.io.*;> > class> GFG {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >e.printStackTrace();> >}> >}> }>

>

>

Išvestis

java.lang.ArithmeticException: / by zero at GFG.main(File.java:10)>

2. toString()

Metodas toString() spausdina išimties informaciją formatu Išimties pavadinimas: išimties aprašymas.

Pavyzdys:

Java




//program to print the exception information using toString() method> > import> java.io.*;> > class> GFG1 {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >System.out.println(e.toString());> >}> >}> }>

>

mašinraščio foreach

>

Išvestis

java.lang.ArithmeticException: / by zero>

3. getMessage()

GetMessage() metodas spausdina tik išimties aprašymą.

Pavyzdys:

Java




//program to print the exception information using getMessage() method> > import> java.io.*;> > class> GFG1 {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >System.out.println(e.getMessage());> >}> >}> }>

>

>

Išvestis

/ by zero>

Kaip JVM elgiasi su išimtimi?

Numatytasis išimčių tvarkymas: Jei metodo viduje įvyksta išimtis, metodas sukuria objektą, žinomą kaip išimties objektas, ir perduoda jį vykdymo laiko sistemai (JVM). Išimties objekte yra išimties pavadinimas ir aprašymas bei dabartinė programos, kurioje buvo išimtis, būsena. Išimties objekto sukūrimas ir jo tvarkymas vykdymo sistemoje vadinamas išimties metimu. Gali būti sąrašas metodų, kurie buvo iškviesti norint pasiekti metodą, kuriame įvyko išimtis. Šis sutvarkytas metodų sąrašas vadinamas Skambinkite Stackui . Dabar bus atlikta tokia procedūra.

ne
  • Vykdymo laiko sistema ieško skambučių krūvos, kad surastų metodą, kuriame yra kodo blokas, galintis apdoroti įvykusią išimtį. Kodo blokas vadinamas an Išimčių tvarkytojas .
  • Vykdymo laiko sistema pradeda paiešką nuo metodo, kuriame įvyko išimtis, ir eina per iškvietimų krūvą atvirkštine tvarka, kuria buvo iškviesti metodai.
  • Jei randa tinkamą tvarkyklę, ji perduoda jam įvykusią išimtį. Tinkamas tvarkytuvas reiškia, kad išmesto išimties objekto tipas atitinka išimties objekto tipą, kurį jis gali apdoroti.
  • Jei vykdymo sistema ieško visų metodų iškvietimų krūvoje ir negalėjo rasti tinkamo tvarkyklės, vykdymo laiko sistema perduoda išimties objektą numatytasis išimčių tvarkytuvas , kuri yra vykdymo laiko sistemos dalis. Šis tvarkytuvas išspausdina išimties informaciją tokiu formatu ir nutraukia programą nenormaliai .
Exception in thread 'xxx' Name of Exception : Description ... ...... .. // Call Stack>

Peržiūrėkite toliau pateiktą diagramą, kad suprastumėte skambučių krūvos srautą.

„Java“ išimčių klasių krūvos srautas

Iliustracija:

Java




// Java Program to Demonstrate How Exception Is Thrown> > // Class> // ThrowsExecp> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Taking an empty string> >String str =>null>;> >// Getting length of a string> >System.out.println(str.length());> >}> }>

>

>

Išvestis

programos išvestis

Pažiūrėkime pavyzdį, iliustruojantį, kaip vykdymo laiko sistema ieško atitinkamo išimčių tvarkymo kodo skambučių krūvoje.

Pavyzdys:

Java




// Java Program to Demonstrate Exception is Thrown> // How the runTime System Searches Call-Stack> // to Find Appropriate Exception Handler> > // Class> // ExceptionThrown> class> GFG {> > >// Method 1> >// It throws the Exception(ArithmeticException).> >// Appropriate Exception handler is not found> >// within this method.> >static> int> divideByZero(>int> a,>int> b)> >{> > >// this statement will cause ArithmeticException> >// (/by zero)> >int> i = a / b;> > >return> i;> >}> > >// The runTime System searches the appropriate> >// Exception handler in method also but couldn't have> >// found. So looking forward on the call stack> >static> int> computeDivision(>int> a,>int> b)> >{> > >int> res =>0>;> > >// Try block to check for exceptions> >try> {> > >res = divideByZero(a, b);> >}> > >// Catch block to handle NumberFormatException> >// exception Doesn't matches with> >// ArithmeticException> >catch> (NumberFormatException ex) {> >// Display message when exception occurs> >System.out.println(> >'NumberFormatException is occurred'>);> >}> >return> res;> >}> > >// Method 2> >// Found appropriate Exception handler.> >// i.e. matching catch block.> >public> static> void> main(String args[])> >{> > >int> a =>1>;> >int> b =>0>;> > >// Try block to check for exceptions> >try> {> >int> i = computeDivision(a, b);> >}> > >// Catch block to handle ArithmeticException> >// exceptions> >catch> (ArithmeticException ex) {> > >// getMessage() will print description> >// of exception(here / by zero)> >System.out.println(ex.getMessage());> >}> >}> }>

np.sujungti

>

>

Išvestis

/ by zero>

Kaip programuotojas elgiasi su išimtimi?

Individualus išimčių tvarkymas: „Java“ išimčių tvarkymas valdomas naudojant penkis raktinius žodžius: bandyti , sugauti , mesti , metimai , ir pagaliau . Trumpai, štai kaip jie veikia. Programos teiginiai, kurie, jūsų manymu, gali sukelti išimtis, yra bandymo bloke. Jei bandymo bloke atsiranda išimtis, ji išmetama. Jūsų kodas gali užfiksuoti šią išimtį (naudodamas gaudymo bloką) ir tvarkyti ją racionaliai. Sistemos sukurtas išimtis automatiškai pateikia „Java“ vykdymo laiko sistema. Jei norite rankiniu būdu išmesti išimtį, naudokite raktinį žodį mesti. Bet kuri metodo išimtis turi būti nurodyta metimo sąlyga. Bet koks kodas, kuris būtinai turi būti įvykdytas pasibaigus bandymo blokui, įtraukiamas į galutinį bloką.

Patarimas: Vienas turi praeiti kontroliuoti srautą bandyti gaudyti pagaliau blokuoti, kad geriau suprastumėte.

Reikalingas bandymo gaudymo punktas (tinkintas išimčių tvarkymas)

Apsvarstykite toliau pateiktą programą, kad geriau suprastumėte „try-catch“ sąlygą.

Pavyzdys:

Java




// Java Program to Demonstrate> // Need of try-catch Clause> > // Class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Taking an array of size 4> >int>[] arr =>new> int>[>4>];> > >// Now this statement will cause an exception> >int> i = arr[>4>];> > >// This statement will never execute> >// as above we caught with an exception> >System.out.println(>'Hi, I want to execute'>);> >}> }>

>

32 bitų architektūra prieš 64 bitų
>

Išvestis

programos išvestis

Išvesties paaiškinimas: Aukščiau pateiktame pavyzdyje masyvas apibrėžiamas dydžiu, t. y. galite pasiekti elementus tik nuo 0 iki 3. Bet jūs bandote pasiekti 4 indekso elementus (per klaidą), todėl daroma išimtis. Tokiu atveju JVM nutraukia programą nenormaliai . Teiginys System.out.println(Sveiki, noriu vykdyti); niekada nevykdys. Norėdami jį įvykdyti, turime tvarkyti išimtį naudodami try-catch. Todėl norint tęsti įprastą programos eigą, mums reikia try-catch sąlygos.

Kaip naudoti „Try-catch“ sąlygą?

try {  // block of code to monitor for errors  // the code you think can raise an exception } catch (ExceptionType1 exOb) {  // exception handler for ExceptionType1 } catch (ExceptionType2 exOb) {  // exception handler for ExceptionType2 } // optional finally { // block of code to be executed after try block ends  }>

Reikia atsiminti tam tikrus pagrindinius dalykus, kurie yra šie:

  • Metodą gali sudaryti daugiau nei vienas teiginys, kuris gali sukelti išimtį, todėl visus šiuos teiginius įtraukite į savo bandyti blokuoti ir pateikti atskirą išimčių tvarkyklę sugauti blokas kiekvienam iš jų.
  • Jei įvyksta išimtis bandyti bloką, tą išimtį tvarko su ja susietas išimčių tvarkytuvas. Norėdami susieti išimties tvarkyklę, turime įdėti a sugauti blokuoti po jo. Gali būti daugiau nei vienas išimčių tvarkytuvas. Kiekvienas sugauti blokas yra išimčių tvarkyklė, kuri apdoroja argumentu nurodyto tipo išimtį. Argumentas ExceptionType deklaruoja išimties tipą, kurį jis gali apdoroti, ir turi būti klasės, kuri paveldima iš Metamas klasė.
  • Kiekviename bandymo bloke gali būti nulis arba daugiau gaudymo blokų, bet tik vienas galutinis blokas.
  • Galiausiai blokas yra neprivalomas. Jis visada vykdomas neatsižvelgiant į tai, ar bandymo bloke įvyko išimtis, ar ne. Jei įvyksta išimtis, ji bus vykdoma vėliau pabandykite sugauti blokus. Ir jei išimtis neįvyksta, ji bus vykdoma po to bandyti blokas. Paskutinis „Java“ blokas naudojamas svarbiems kodams, pvz., valymo kodui, įterpti, pvz., uždaryti failą arba uždaryti ryšį.
  • Jei trynimo bloke įrašysime System.exit, tai galiausiai blokas nebus vykdomas.

Santrauka vaizduojama naudojant toliau pateiktą vaizdinę priemonę:

Išimtys Java

Susiję straipsniai:

Susiję kursai

Java programavimo fondas – savarankiškas kursas

Raskite tinkamą kursą, kad galėtumėte pradėti mokytis Java programavimo fondo iš pramonės ekspertų, turinčių ilgametę patirtį. Tai Java programavimo fondas – savarankiškas kursas apima pagrindinius dalykus Java programavimo kalba, duomenų tipai, operatoriai ir srauto valdymas, kilpos, eilutės , ir daug daugiau. Nebereikia laukti! Pradėkite mokytis JAVA dabar ir tapkite visišku Java inžinieriumi!