Obravnava izjem v Javi je eno od učinkovitih sredstev za obravnavo napak med izvajanjem, tako da se lahko ohrani redni tok aplikacije. Ravnanje z izjemami Java je mehanizem za obravnavanje napak med izvajanjem, kot so ClassNotFoundException, IOException, SQLException, RemoteException itd.
abeceda v številko
Kaj so izjeme Java?
V Javi, izjema je nezaželen ali nepričakovan dogodek, ki se zgodi med izvajanjem programa, to je v času izvajanja, ki zmoti normalen tok navodil programa. Program lahko ujame in obravnava izjeme. Ko pride do izjeme znotraj metode, ustvari objekt. Ta objekt se imenuje objekt izjeme. Vsebuje informacije o izjemi, kot so ime in opis izjeme ter stanje programa, ko je prišlo do izjeme.
Glavni razlogi za pojav izjeme
- Neveljaven uporabniški vnos
- Okvara naprave
- Izguba omrežne povezave
- Fizične omejitve (pomnilnik brez diska)
- Napake kode
- Odpiranje datoteke, ki ni na voljo
Napake predstavljajo nepopravljiva stanja, kot je Java virtualni stroj (JVM), ki mu zmanjkuje pomnilnika, puščanje pomnilnika, napake prekoračitve sklada, nezdružljivost knjižnice, neskončna rekurzija itd. Napake so običajno izven nadzora programerja, zato jih ne smemo poskušati obravnavati.
Razlika med napako in izjemo
Pogovorimo se o najpomembnejšem delu, ki je razlike med napako in izjemo to je takole:
- Napaka: Napaka označuje resno težavo, ki je razumna aplikacija ne bi smela poskušati ujeti.
- Izjema: Izjema označuje pogoje, ki bi jih razumna aplikacija lahko poskušala ujeti.
Hierarhija izjem
Vse vrste izjem in napak so podrazredi razreda Za metanje , ki je osnovni razred hierarhije. Eno podružnico vodi Izjema . Ta razred se uporablja za izjemne pogoje, ki bi jih morali ujeti uporabniški programi. NullPointerException je primer takšne izjeme. Druga veja, Napaka uporablja izvajalni sistem Java( JVM ), da prikaže napake, ki so povezane s samim okoljem izvajanja (JRE). StackOverflowError je primer takšne napake.

Hierarhija izjem Java
Vrste izjem
Java definira več vrst izjem, ki se nanašajo na njene različne knjižnice razredov. Java tudi omogoča uporabnikom, da definirajo lastne izjeme.

Izjeme je mogoče kategorizirati na dva načina:
- Vgrajene izjeme
- Preverjena izjema
- Nepreverjena izjema
- Uporabniško določene izjeme
Razpravljajmo o zgoraj opredeljeni izjemi, ki je naslednja:
1. Vgrajene izjeme
Vgrajene izjeme so izjeme, ki so na voljo v knjižnicah Java. Te izjeme so primerne za razlago določenih napak.
- Preverjene izjeme: Preverjene izjeme se imenujejo izjeme v času prevajanja, ker te izjeme preveri prevajalnik v času prevajanja.
- Nepreverjene izjeme: Nepreverjene izjeme so ravno nasprotne preverjenim izjemam. Prevajalnik ne bo preverjal teh izjem med prevajanjem. Preprosto povedano, če program vrže nepreverjeno izjemo in tudi če je nismo obravnavali ali deklarirali, program ne bo izdal napake pri prevajanju.
Opomba: Za označeno in nepreverjeno izjemo glejte Preverjene v primerjavi z nepreverjenimi izjemami
2. Uporabniško določene izjeme:
Včasih v Javi vgrajene izjeme ne morejo opisati določene situacije. V takih primerih lahko uporabniki ustvarijo tudi izjeme, ki se imenujejo 'uporabniško določene izjeme'.
The prednosti obravnavanja izjem v Javi so naslednji:
- Zagotavljanje dokončanja izvajanja programa
- Preprosta identifikacija programske kode in kode za obravnavo napak
- Širjenje napak
- Smiselno poročanje o napakah
- Prepoznavanje vrst napak
Metode za tiskanje informacij o izjemi:
1. printStackTrace()
Ta metoda natisne informacije o izjemi v obliki Ime izjeme: opis izjeme, sled sklada.
primer:
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();> > }> > }> }> |
>
>
Izhod
java.lang.ArithmeticException: / by zero at GFG.main(File.java:10)>
2. toString()
Metoda toString() natisne informacije o izjemi v obliki Ime izjeme: opis izjeme.
primer:
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());> > }> > }> }> |
>
>
Izhod
java.lang.ArithmeticException: / by zero>
3. getMessage()
Metoda getMessage() natisne le opis izjeme.
primer:
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());> > }> > }> }> |
>
>
Izhod
/ by zero>
Kako JVM obravnava izjemo?
Privzeta obravnava izjem: Kadarkoli znotraj metode, če je prišlo do izjeme, metoda ustvari objekt, znan kot izjema, in ga preda sistemu izvajalnega okolja (JVM). Objekt izjeme vsebuje ime in opis izjeme ter trenutno stanje programa, kjer je do izjeme prišlo. Ustvarjanje objekta izjeme in ravnanje z njim v sistemu izvajalnega okolja se imenuje ustvarjanje izjeme. Obstaja lahko seznam metod, ki so bile poklicane, da bi prišle do metode, pri kateri je prišlo do izjeme. Ta urejeni seznam metod se imenuje Call Stack . Zdaj se bo zgodil naslednji postopek.
- Sistem izvajalnega okolja preišče sklad klicev, da bi našel metodo, ki vsebuje blok kode, ki lahko obravnava nastalo izjemo. Blok kode se imenuje an Obravnavalec izjem .
- Izvajalni sistem začne iskati od metode, pri kateri je prišlo do izjeme, in nadaljuje skozi klicni sklad v obratnem vrstnem redu, v katerem so bile klicane metode.
- Če najde ustreznega obdelovalca, mu posreduje nastalo izjemo. Ustrezen obravnavalec pomeni, da se vrsta vrženega izjemnega objekta ujema z vrsto izjemnega predmeta, ki ga lahko obravnava.
- Če sistem izvajalnega okolja preišče vse metode v skladu klicev in ne bi mogel najti ustreznega obdelovalca, potem sistem izvajalnega okolja preda objekt izjeme privzeti obravnavalec izjem , ki je del izvajalnega sistema. Ta upravljalnik natisne informacije o izjemi v naslednji obliki in prekine program nenormalno .
Exception in thread 'xxx' Name of Exception : Description ... ...... .. // Call Stack>
Oglejte si spodnji diagram, da boste razumeli potek sklada klicev.

Ilustracija:
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());> > }> }> |
>
>
Izhod

Oglejmo si primer, ki ponazarja, kako sistem izvajalnega okolja išče ustrezno kodo za obravnavo izjem na skladu klicev.
primer:
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());> > }> > }> }> |
>
>Izhod
/ by zero>
Kako programer obravnava izjemo?
Prilagojena obravnava izjem: Obravnavanje izjem Java se upravlja s petimi ključnimi besedami: poskusi , ulov , metati , vrže , in končno . Na kratko, tukaj je, kako delujejo. Stavki programa, za katere menite, da lahko povzročijo izjeme, so vsebovani v bloku poskusa. Če se znotraj poskusnega bloka pojavi izjema, se vrže. Vaša koda lahko ujame to izjemo (z uporabo bloka catch) in jo obravnava na nek racionalen način. Izjeme, ki jih ustvari sistem, samodejno vrže sistem izvajalnega okolja Java. Če želite ročno sprožiti izjemo, uporabite ključno besedo throw. Vsaka izjema, ki je vržena iz metode, mora biti kot taka podana s klavzulo o vrženju. Vsaka koda, ki jo je nujno potrebno izvesti po zaključku poskusnega bloka, se postavi v končni blok.
Nasvet: Človek mora iti skozi nadzor toka v poskusu ulova končno blok za boljše razumevanje.
Potreba po klavzuli try-catch (prilagojeno ravnanje z izjemami)
Razmislite o spodnjem programu, da boste bolje razumeli klavzulo try-catch.
primer:
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'> );> > }> }> |
>
>
Izhod

Razlaga izhoda: V zgornjem primeru je matrika definirana z velikostjo, kar pomeni, da lahko dostopate le do elementov od indeksa 0 do 3. Vendar poskušate dostopati do elementov pri indeksu 4 (po pomoti), zato vrže izjemo. V tem primeru JVM prekine program nenormalno . Izjava System.out.println(Živjo, želim izvršiti); ne bo nikoli izvršil. Če ga želimo izvesti, moramo izjemo obdelati s poskusnim ulovom. Za nadaljevanje normalnega poteka programa potrebujemo klavzulo poskusi-ulovi.
Kako uporabljati klavzulo Try-catch?
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 }>
Zapomniti si je treba nekatere ključne točke, ki so naslednje:
- V metodi je lahko več kot en stavek, ki lahko sproži izjemo, zato vse te izjave postavite znotraj svojih poskusi blokirajo in zagotovijo ločenega obdelovalca izjem znotraj svojih ulov blok za vsakega od njih.
- Če pride do izjeme znotraj poskusi blok, to izjemo obravnava z njim povezan obravnavalec izjem. Če želite povezati obravnavo izjem, moramo postaviti a ulov blok po njem. Obravnavalcev izjem je lahko več. Vsak ulov block je obravnavalec izjeme, ki obravnava izjemo glede na vrsto, ki jo označuje njen argument. Argument ExceptionType deklarira vrsto izjeme, ki jo lahko obravnava, in mora biti ime razreda, ki deduje od Za metanje razred.
- Za vsak poskusni blok je lahko nič ali več blokov ulova, vendar samo en končni blok.
- Blok finally ni obvezen. Vedno se izvede ne glede na to, ali je prišlo do izjeme v poskusnem bloku ali ne. Če pride do izjeme, se izvede pozneje poskusite ujeti bloke. In če do izjeme ne pride, bo izvedena po poskusi blok. Blok finally v Javi se uporablja za vstavljanje pomembnih kod, kot je koda za čiščenje, na primer zapiranje datoteke ali zapiranje povezave.
- Če v bloku try zapišemo System.exit, potem blok finally ne bo izveden.
Povzetek je prikazan z vizualno pomočjo spodaj, kot sledi:

Povezani članki:
- Vrste izjem v Javi
- Preverjene v primerjavi z nepreverjenimi izjemami
- Throw-Throws v Javi
Sorodni tečaji
Java Programming Foundation – samostojni tečaj
Poiščite pravi tečaj za začetek učenja Java Programming Foundation pri strokovnjakih iz industrije z dolgoletnimi izkušnjami. to Java Programming Foundation – samostojni tečaj pokriva osnove Programski jezik Java, tipi podatkov, operatorji in krmiljenje toka, zanke, nizi , in veliko več. Nič več čakanja! Začnite se učiti Javo zdaj in postanite popoln inženir Jave!