Izņēmumu apstrāde Java ir viens no efektīvajiem līdzekļiem izpildlaika kļūdu novēršanai, lai varētu saglabāt regulāru lietojumprogrammas plūsmu. Java izņēmumu apstrāde ir mehānisms, lai apstrādātu izpildlaika kļūdas, piemēram, ClassNotFoundException, IOException, SQLException, RemoteException utt.
Kas ir Java izņēmumi?
Java valodā izņēmums ir nevēlams vai negaidīts notikums, kas notiek programmas izpildes laikā, t.i., izpildes laikā, kas traucē normālu programmas instrukciju plūsmu. Programma var uztvert un apstrādāt izņēmumus. Ja metodē notiek izņēmums, tā izveido objektu. Šo objektu sauc par izņēmuma objektu. Tajā ir informācija par izņēmumu, piemēram, izņēmuma nosaukums un apraksts, kā arī programmas stāvoklis, kad izņēmums notika.
Galvenie iemesli, kāpēc notiek izņēmums
- Nederīga lietotāja ievade
- Ierīces kļūme
- Tīkla savienojuma zudums
- Fiziskie ierobežojumi (ārpus diska atmiņa)
- Koda kļūdas
- Tiek atvērts nepieejams fails
Kļūdas atspoguļo neatgriezeniskus apstākļus, piemēram, Java virtuālās mašīnas (JVM), kurā beidzas atmiņa, atmiņas noplūdes, steka pārpildes kļūdas, bibliotēkas nesaderība, bezgalīga rekursija utt. Kļūdas parasti nevar kontrolēt programmētājs, un mums nevajadzētu mēģināt rīkoties ar kļūdām.
Atšķirība starp kļūdu un izņēmumu
Apspriedīsim vissvarīgāko daļu, kas ir atšķirības starp kļūdu un izņēmumu tas ir šādi:
- Kļūda: Kļūda norāda uz nopietnu problēmu, kuru saprātīgai lietojumprogrammai nevajadzētu mēģināt novērst.
- Izņēmums: Izņēmums norāda uz apstākļiem, kurus saprātīga lietojumprogramma varētu mēģināt panākt.
Izņēmumu hierarhija
Visi izņēmumu un kļūdu veidi ir klases apakšklases Metams , kas ir hierarhijas pamatklase. Vienu filiāli vada Izņēmums . Šī klase tiek izmantota ārkārtējos apstākļos, kas lietotāja programmām ir jānoķer. NullPointerException ir šāda izņēmuma piemērs. Vēl viens zars, Kļūda izmanto Java izpildlaika sistēma ( JVM ), lai norādītu kļūdas, kas saistītas ar pašu izpildlaika vidi (JRE). StackOverflowError ir šādas kļūdas piemērs.

Java izņēmumu hierarhija
kā savienot pārī Beats austiņas
Izņēmumu veidi
Java definē vairākus izņēmumu veidus, kas attiecas uz tās dažādajām klašu bibliotēkām. Java arī ļauj lietotājiem definēt savus izņēmumus.
Izņēmumus var iedalīt divos veidos:
- Iebūvētie izņēmumi
- Pārbaudīts izņēmums
- Neatzīmēts Izņēmums
- Lietotāja noteikti izņēmumi
Apspriedīsim iepriekš definēto izņēmumu, kas ir šāds:
1. Iebūvētie izņēmumi
Iebūvētie izņēmumi ir izņēmumi, kas ir pieejami Java bibliotēkās. Šie izņēmumi ir piemēroti, lai izskaidrotu noteiktas kļūdu situācijas.
- Pārbaudītie izņēmumi: Pārbaudītos izņēmumus sauc par kompilēšanas laika izņēmumiem, jo kompilators šos izņēmumus pārbauda kompilēšanas laikā.
- Neatzīmētie izņēmumi: Neatzīmētie izņēmumi ir tieši pretēji atzīmētajiem izņēmumiem. Kompilators nepārbaudīs šos izņēmumus kompilēšanas laikā. Vienkāršiem vārdiem sakot, ja programma rada nepārbaudītu izņēmumu un pat ja mēs to neapstrādājām vai nedeklarētu, programma nesniegs kompilācijas kļūdu.
Piezīme: Informāciju par atzīmēto un neatzīmēto izņēmumu skatiet Atzīmēti pret neatzīmētiem izņēmumiem
2. Lietotāja noteikti izņēmumi:
Dažreiz Java iebūvētie izņēmumi nespēj aprakstīt noteiktu situāciju. Šādos gadījumos lietotāji var izveidot arī izņēmumus, kurus sauc par “lietotāja definētiem izņēmumiem”.
The Java izņēmumu apstrādes priekšrocības ir šādi:
- Noteikums programmas pilnīgai izpildei
- Vienkārša programmas koda un kļūdu apstrādes koda identificēšana
- Kļūdu izplatīšanās
- Nozīmīga kļūdu ziņošana
- Kļūdu veidu identificēšana
Izņēmuma informācijas drukāšanas metodes:
1. printStackTrace()
Šī metode izdrukā izņēmuma informāciju formātā Izņēmuma nosaukums: izņēmuma apraksts, steka izsekošana.
Piemērs:
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();> >}> >}> }> |
>
>
Izvade
java.lang.ArithmeticException: / by zero at GFG.main(File.java:10)>
2. toString()
Metode toString() izdrukā izņēmuma informāciju formātā Izņēmuma nosaukums: izņēmuma apraksts.
Piemērs:
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());> >}> >}> }> |
>
>
Izvade
java.lang.ArithmeticException: / by zero>
3. getMessage()
GetMessage() metode izdrukā tikai izņēmuma aprakstu.
Piemērs:
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());> >}> >}> }> |
>
>
Izvade
/ by zero>
Kā JVM rīkojas ar izņēmumu?
Noklusējuma izņēmumu apstrāde: Ikreiz, kad metodē ir noticis izņēmums, metode izveido objektu, kas pazīstams kā izņēmuma objekts, un nodod to izpildlaika sistēmai (JVM). Izņēmuma objekts satur izņēmuma nosaukumu un aprakstu, kā arī programmas pašreizējo stāvokli, kurā ir noticis izņēmums. Izņēmuma objekta izveidošanu un apstrādi izpildlaika sistēmā sauc par izņēmuma izmešanu. Var būt to metožu saraksts, kuras tika izsauktas, lai piekļūtu metodei, kurā notika izņēmums. Šo sakārtoto metožu sarakstu sauc Call Stack . Tagad notiks šāda procedūra.
- Izpildlaika sistēma meklē izsaukumu steku, lai atrastu metodi, kas satur koda bloku, kas var apstrādāt notikušo izņēmumu. Koda bloku sauc par an Izņēmumu apstrādātājs .
- Izpildes laika sistēma sāk meklēšanu no metodes, kurā notika izņēmums, un turpina izsaukumu steku apgrieztā secībā, kādā tika izsauktas metodes.
- Ja tas atrod atbilstošu apdarinātāju, tas nodod tam notikušo izņēmumu. Atbilstošs apstrādātājs nozīmē, ka izmestā izņēmuma objekta veids atbilst izņēmuma objekta veidam, ko tas var apstrādāt.
- Ja izpildlaika sistēma meklē visas metodes zvanu stekā un nevarēja atrast atbilstošo apdarinātāju, izpildlaika sistēma nodod izņēmuma objektu noklusējuma izņēmumu apstrādātājs , kas ir daļa no izpildlaika sistēmas. Šis apdarinātājs izdrukā informāciju par izņēmumu šādā formātā un pārtrauc programmu nenormāli .
Exception in thread 'xxx' Name of Exception : Description ... ...... .. // Call Stack>
Apskatiet tālāk redzamo diagrammu, lai izprastu zvanu steka plūsmu.
Ilustrācija:
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());> >}> }> |
>
>
Izvade
Apskatīsim piemēru, kas ilustrē, kā izpildlaika sistēma meklē atbilstošu izņēmumu apstrādes kodu zvanu stekā.
Piemērs:
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());> >}> >}> }> |
>
>Izvade
/ by zero>
Kā programmētājs rīkojas ar izņēmumu?
Pielāgota izņēmumu apstrāde: Java izņēmumu apstrāde tiek pārvaldīta, izmantojot piecus atslēgvārdus: mēģināt , noķert , mest , metieni , un beidzot . Īsumā, lūk, kā viņi strādā. Programmas paziņojumi, kas, jūsuprāt, var radīt izņēmumus, ir ietverti mēģinājuma blokā. Ja mēģinājuma blokā notiek izņēmums, tas tiek izmests. Jūsu kods var uztvert šo izņēmumu (izmantojot uztveršanas bloku) un rīkoties ar to racionālā veidā. Sistēmas ģenerētus izņēmumus automātiski izmet Java izpildlaika sistēma. Lai manuāli izmestu izņēmumu, izmantojiet atslēgvārdu throw. Jebkurš izņēmums, kas tiek izmests no metodes, ir jānorāda ar metienu klauzulu. Jebkurš kods, kas noteikti ir jāizpilda pēc mēģinājuma bloka pabeigšanas, tiek ievietots galīgajā blokā.
Padoms: Ir jāiet cauri kontrolēt plūsmas mēģinājumu noķert beidzot bloķēt labākai izpratnei.
Nepieciešamības izmēģināšanas klauzula (pielāgota izņēmumu apstrāde)
Apsveriet tālāk norādīto programmu, lai labāk izprastu try-catch klauzulu.
Piemērs:
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'>);> >}> }> |
>
>
Izvade
Izvades skaidrojums: Iepriekš minētajā piemērā masīvs ir definēts ar lielumu, t.i., jūs varat piekļūt elementiem tikai no indeksa 0 līdz 3. Bet jūs mēģināt piekļūt elementiem indeksā 4 (kļūdas dēļ), tāpēc tas rada izņēmumu. Šajā gadījumā JVM pārtrauc programmu nenormāli . Paziņojums System.out.println (Sveiki, es gribu izpildīt); nekad neizpildīs. Lai to izpildītu, mums ir jārīkojas ar izņēmumu, izmantojot try-catch. Tāpēc, lai turpinātu parasto programmas plūsmu, mums ir nepieciešama try-catch klauzula.
Kā izmantot Try-catch klauzulu?
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 }> Ir jāatceras daži galvenie punkti, kas ir šādi:
- Metodē var būt vairāk nekā viens paziņojums, kas var radīt izņēmumu, tāpēc iekļaujiet visus šos apgalvojumus savā ietvaros mēģināt bloķēt un nodrošināt atsevišķu izņēmumu apdarinātāju noķert bloku katram no tiem.
- Ja iekšienē notiek izņēmums mēģināt bloku, šo izņēmumu apstrādā ar to saistītais izņēmumu apstrādātājs. Lai saistītu izņēmumu apdarinātāju, jāievieto a noķert bloķēt pēc tā. Var būt vairāk nekā viens izņēmumu apstrādātājs. Katrs noķert bloks ir izņēmumu apdarinātājs, kas apstrādā tā argumentā norādītā veida izņēmumu. Arguments ExceptionType deklarē izņēmuma veidu, ko tas var apstrādāt, un tam ir jābūt tās klases nosaukumam, kas manto no Metams klasē.
- Katram mēģinājuma blokam var būt nulle vai vairāk nozvejas bloku, bet tikai viens pēdējais bloks.
- Visbeidzot, bloks nav obligāts. Tas vienmēr tiek izpildīts neatkarīgi no tā, vai mēģinājuma blokā ir noticis izņēmums vai nē. Ja rodas izņēmums, tas tiks izpildīts pēc tam mēģināt noķert blokus. Un, ja izņēmums nenotiek, tas tiks izpildīts pēc mēģināt bloķēt. Pēdējais Java bloks tiek izmantots, lai ievietotu svarīgus kodus, piemēram, tīrīšanas kodu, piemēram, faila aizvēršanai vai savienojuma aizvēršanai.
- Ja try blokā ierakstām System.exit, tad beidzot bloks netiks izpildīts.
Kopsavilkums ir attēlots ar vizuālo palīglīdzekli šādi:
Saistītie raksti:
- Izņēmumu veidi Java
- Atzīmēti pret neatzīmētiem izņēmumiem
- Metiens-metiens Java valodā
Saistītie kursi
Java programmēšanas fonds – pašmācības kurss
Atrodiet sev piemērotāko kursu, lai sāktu apgūt Java programmēšanas fondu no nozares ekspertiem ar daudzu gadu pieredzi. Šis Java programmēšanas fonds – pašmācības kurss aptver pamatus Java programmēšanas valoda, datu tipi, operatori un plūsmas vadība, cilpas, virknes , un daudz vairāk. Vairs nav jāgaida! Sāciet mācīties JAVA tūlīt un kļūstiet par pilnīgu Java inženieri!