try catch finally
V tej vadnici bomo obravnavali različne ključne besede, ki se uporabljajo v Javi za obravnavo izjem, kot so Poskusi, Ujeli, Končno, Vrgel in Vrgel s primeri:
V naših prejšnjih vajah smo videli osnove ravnanja z izjemami v Javi, skupaj z različnimi izjemami, ki jih podpira razred Java Exception. Podrobno smo razpravljali tudi o NullPointerException.
Izjeme lahko v svoj program vključimo z uporabo nekaterih ključnih besed, ki so na voljo v Javi. Te ključne besede definirajo različne bloke kode, ki olajšajo definiranje izjem in njihovo obravnavo.
=> Obiščite tukaj za ekskluzivno serijo vadnic Java.
Kaj se boste naučili:
Poskusite, ujemite, končno v Javi
Spodnje ključne besede se v Javi uporabljajo za obdelavo izjem.
- Poskusi
- Ujemite
- Končno
- Vrzi
- Meti
Naslednja tabela na kratko opisuje te ključne besede.
Ključna beseda | Opis |
---|---|
Poskusi | Blok kode, ki bi lahko povzročil izjemo, določimo v posebnem bloku s ključno besedo »Try«. |
Ujemite | Ko je izjema postavljena, jo mora program ujeti. To se naredi s pomočjo ključne besede »catch«. Blok catch torej sledi bloku try, ki sproži izjemo. Ključno besedo catch je vedno treba uporabiti s poskusom. |
Končno | Včasih imamo v programu pomembno kodo, ki jo je treba izvesti ne glede na to, ali je izjema vržena ali ne. Ta koda se nahaja v posebnem bloku, ki se začne s ključno besedo »Končno«. Blok Končno sledi bloku Try-catch. |
Vrzi | Ključna beseda »vrzi« se uporablja za izrecno vrganje izjeme. |
Meti | Ključna beseda »Vrže« ne vrže izjeme, ampak se uporablja za razglasitev izjem. Ta ključna beseda označuje, da lahko pride do izjeme v programu ali metodi. |
V tej vadnici bomo podrobno razpravljali o vseh zgornjih ključnih besedah skupaj s primeri programiranja.
Poskusite Blokirati v Javi
Kadarkoli pišemo program, lahko pride do kode, za katero sumimo, da bi lahko povzročila izjemo. Na primer, lahko sumimo, da v kodi obstaja operacija 'deljenje z ničlo', ki bo povzročila izjemo.
Ta koda, ki lahko povzroči izjemo, je zaprta v blok s ključno besedo »poskusi«. Torej blok try vsebuje kodo ali niz izjav, ki lahko povzročijo izjemo.
Splošna sintaksa poskusnega bloka je naslednja:
try{ //set of statements that can raise exception }
Če torej programer misli, da bodo nekatere izjave povzročile izjeme, jih dodajte v poskusni blok. Ko pride do izjeme pri določenem stavku v poskusnem bloku, se preostala koda ne izvede.
Ko pride do izjeme v poskusnem bloku pri določenem stavku, se kontrolnik prikaže in program se nenadoma konča. Da bi preprečili nenadno ukinitev programa, bi morali to izjemo 'obravnavati'. To ravnanje poteka s ključno besedo »catch«. Torej, bloku try vedno sledi blok catch.
Catch Block v Javi
Za obravnavo izjem uporabljamo blok catch. To je blok s ključno besedo »catch«. Blok catch sledi bloku try.
Kadar koli pride do izjeme v poskusnem bloku, se izvede koda v ulovnem bloku, ki ustreza izjemi.
Splošna sintaksa bloka catch je:
catch (Exception e){ //code to handle exception e }
Na splošno mora biti deklarirana izjema nadrejeni razred vseh izjem, tj. Če pa obstaja več izjem, lahko napišemo tudi posebne vrste izjem ali ustvarjene izjeme.
Nato bomo razpravljali o bloku try-catch. Upoštevajte, da imamo lahko za vsak poskusni blok več blokov catch.
Try-Catch Java
Splošna sintaksa bloka try-catch je prikazana spodaj:
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
Preizkusni blok ima lahko več vrstic kode, ki lahko povzroči več izjem. Vsako od teh izjem obravnava neodvisen blok ulova.
Generični obravnavalec izjem, objekt e razreda Exception, lahko obravnava vse izjeme, če pa želimo obdelovati določene izjeme, je priporočljivo, da kot zadnji ulovni blok navedete splošni upravljalnik izjem.
Java Try Catch Primer
Zdaj pa pokažite blok try-catch v Javi. Tu v bloku try določimo operacijo delitve. Delitelj je nič. Tako stavek, ki deli dve številki, sproži aritmetično izjemo. Imamo ulovni blok, ki definira obdelovalec za aritmetično izjemo.
Spodaj je primer Java programa.
class Main { public static void main(String args()) { int val1, val2; try { //this block will contain statements that may raise exceptions System.out.println('Try Block:: Start'); val1 = 0; val2 = 25 / val1; System.out.println(val2); System.out.println('Try Block:: End'); } catch (ArithmeticException e) { //handler for ArithmeticException System.out.println('ArithmeticException :: Divide by Zero!!'); } System.out.println('Outside try-catch:: Rest of the code.'); } }
Izhod
pretvornik youtube v mp3 brez virusa -
Ulov več izjem
Kot smo že omenili, lahko poskusni blok vsebuje kodo, ki sproži več kot eno izjemo. V tem primeru bomo za obdelavo vsake izjeme potrebovali več kot en blok catch. Posameznemu bloku poskusov lahko sledi več blokov ulova. Vsak ulovni blok bo obravnaval neodvisne izjeme.
V primeru več blokov ulova si moramo zapomniti spodnje točke:
- V programu Java se lahko kadar koli zgodi le ena izjema. Prav tako se na kateri koli točki izvede samo en blok ulova.
- Več blokov ulova je treba razvrstiti tako, da mora biti blok ulova za najbolj specifično izjemo na prvem mestu, nato pa splošno.
Na primer, če imamo ArithmeticException in splošno izjemo, bo najprej na vrsti obravnava bloka catch ArithmeticException, čemur bo sledila izjema, ki obravnava blok catch.
Spodnji primer prikazuje več blokov ulova.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); myArray (5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Izhod
V zgornjem programu se sproži ArithmeticException, ki je ujet v prvem bloku ulova. Če ta blok ulova ni bil podan, bi se izjema razširila na splošni blok ulova.
Nekoliko spremenimo zgornji program, tako da bo poskusni blok povzročil dve izjemi. Zdaj pa si oglejmo rezultate.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); System.out.println('Array element 10 : ' + myArray(10)); myArray(5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Izhod
Če vidimo ta izhod, bo prikazan vržen ArrayIndexOutOfBoundsException. To je zato, ker se najprej izvrši stavek, ki sproži ArrayIndexOutOfBoundsException. Izjema se vrže in nadzor gre v ustrezen blok ulova.
Vgnezdeni poskusni ulov
Preizkusni blok znotraj drugega poskusnega bloka se imenuje ugnezdeni poskusni blok. Takšne strukture potrebujemo v določenih situacijah, ko je del kode, ki ga vsebuje poskusna koda, lahko takšen, da nekatere vrstice sprožijo določene izjeme, drugi del kode pa povsem drugačno izjemo.
V primeru ugnezdenih poskusnih blokov se najprej izvede notranji poskusni blok in obdela izjema. Če notranji poskusni blok nima ujemajočega se ulovnega bloka, se razširi eno stopnjo do nadrejenega poskusnega bloka. Na ta način se izjema širi navzgor, dokler ne najde ustreznega obdelovalca izjem.
Če ni nobenega izvajalca izjeme, ki bi se ujemal z izjemo, se program nenadoma zaključi s sistemsko ustvarjenim sporočilom.
Splošna sintaksa ugnezdenega poskusnega bloka je podana spodaj:
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
Izvedimo program za prikaz ugnezdenega bloka try-catch.
class Main{ public static void main(String args()){ //Main try block try{ //try block1 try{ System.out.println('Try Block1'); int num =15/0; System.out.println(num); } catch(ArithmeticException e1){ System.out.println('Block1 Exception: e1'); } //try block2 try{ System.out.println('Try Block2'); int num =100/0; System.out.println(num); } catch(ArrayIndexOutOfBoundsException e2){ System.out.println('Block2 Exception: e2'); } System.out.println('General statement after Block1 and Block2'); } catch(ArithmeticException e3){ System.out.println('Main Block Arithmetic Exception'); } catch(ArrayIndexOutOfBoundsException e4){ System.out.println('Main Block ArrayIndexOutOfBoundsException'); } catch(Exception e5){ System.out.println('Main Block General Exception'); } System.out.println('Code after Nested Try Block'); } }
Izhod
V zgornjem programu imamo v glavnem poskusnem bloku zaprta dva poskusna bloka. Oba notranja poskusna bloka imata kodo, ki sproži ArithmeticException. Vendar smo zagotovili ustrezen ulovni blok samo za prvi blok in ne za drugi poskusni blok.
Zato drugi blok razširi svojo izjemo na glavni poskusni blok in jo nato obdela. To je razvidno iz rezultata.
Končno blokiraj v Javi
Do zdaj smo videli poskusni ulov in ugnezdeni poskusni blok. Vemo, da je koda, za katero se pričakuje, da bo povzročila izjemo, vstavljena v poskusni blok. Ko pride do izjeme, se preostali del kode v poskusnem bloku ne izvede.
Program se nenadoma konča, če izjema ni obdelana, ali pa se nadzor posreduje obdelovalcu izjem.
V takšnih razmerah se pojavi potreba po vključitvi kode, ki jo je treba izvršiti ne glede na to, ali pride do izjeme ali ne. To pomeni, da bomo izvedli del kode tudi takrat, ko pride do izjeme in tudi, ko se izjema ne zgodi.
Ker pa poskus bloka izstopi po dvigu izjeme, te kode ne moremo vstaviti v blok poskus. Podobno ima tudi catch block obdelovalec izjem, zato tudi tega ne moremo vstaviti v catch block.
Zato potrebujemo ločen blok, ki vsebuje kodo, ki se izvede ne glede na to, ali pride do izjeme ali ne. Java ponuja blok 'končno', ki vsebuje ta del kode.
Zato lahko končni blok v Javi vsebuje kritične stavke, ki jih je treba izvesti v programu. Izvajanje teh izjav je treba izvesti tudi, kadar pride do izjeme ali ne.
Zato bomo v končni blok postavili kodo, kot so zapiranje povezav, predmeti predvajanja itd. Ali katero koli čistilno kodo, tako da jih je mogoče izvesti, tudi če pride do izjeme.
Končni blok v Javi se običajno postavi po bloku try or catch. Upoštevajte, da zaključni blok ne more obstajati brez poskusnega bloka. Ko je zaključni blok vključen v funkcijo try-catch, postane » poskusite-ulov-končno ”Blok.
V kodi za obdelavo izjem lahko preskočimo zadnji blok. To pomeni, da na koncu blok ni obvezen.
Če poskusni blok ne sproži nobene izjeme, bo končni blok izveden po poskusnem bloku. Če je v poskusnem bloku izjema, bo nadzor najprej prešel na blok catch in nato na block.
Izjema, ki se pojavi v koncu bloka, se obnaša enako kot katera koli druga izjema. Tudi če poskusni blok vsebuje stavek vrnitve ali razvejane stavke, kot sta break in continue, bo blok final še vedno izveden.
Upoštevajoč te točke, nadaljujmo s splošno sintakso in primeri na koncu block.
Splošna sintaksa končnega bloka je naslednja:
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
Čeprav se končno blok vedno izvrši, se v določenih situacijah ali primerih ne izvede.
Spodaj so navedeni primeri:
- Ko je nit mrtva.
- Ko je uporabljena metoda System.exit ().
- Ko pride do izjeme v zaključnem bloku.
Izvedimo nekaj programov za prikaz končnega bloka.
class Main { public static void main (String args()) { //try block try { System.out.println ('::Try Block::'); int data = 125 / 5; System.out.println ('Result:' + data); } //catch block catch (NullPointerException e) { System.out.println ('::Catch Block::'); System.out.println (e); } //finally block finally { System.out.println (':: Finally Block::'); System.out.println ('No Exception::finally block executed'); } System.out.println ('rest of the code...'); } }
Izhod
Zgornji program prikazuje blok try-catch-konačno. V poskusnem bloku se izvede veljavna operacija, zato ni vržena nobena izjema. Zato kontrolnik ni poslan za ulov iz poskusa, ampak za dokončno blokiranje.
Naslednji program je še en primer poskusnega ulova-končno, vendar je v tem primeru izjema vržena v poskusni blok, ko izvajamo deljenje z nič. Tako se zaključni blok izvede po izvedbi poskusnega bloka catch.
class Main { public static void main(String args()) { //try block try{ System.out.println('::Try block::'); int num=67/0; System.out.println(num); } //catch block catch(ArithmeticException e){ System.out.println('::Catch block::'); System.out.println('ArithmeticException::Number divided by zero'); } //finally block finally{ System.out.println('::Finally block::'); } System.out.println('Rest of the code continues...'); } }
Izhod
Vrzi izjemo v Javo
Java ponuja ključno besedo 'throw', s katero lahko izrecno vržemo izjeme v kodo. Na primer, če preverjamo aritmetične operacije in želimo po preverjanju operandov opozoriti na nekatere izjeme, lahko to storimo s pomočjo ključne besede 'throw'.
S ključno besedo throw lahko vržemo preverjene ali nepreverjene izjeme. Ključna beseda throw se uporablja tudi za metanje izjem po meri.
Splošna sintaksa ključne besede throw je:
throw exception; or throw new exception_class('error message');
Spodaj je primer programa za prikaz ključne besede throw.
public class Main{ static void validate_Age(int age){ //if specified age is <18, throw ArithmeticException if(age<18) throw new ArithmeticException('Not eligible to vote and drive!!'); else //print the message System.out.println('Eligible to vote and drive!!'); } public static void main(String args()){ //call validate_Age method validate_Age(10); System.out.println('rest of the code...'); } }
Izhod
V zgornjem programu uporabljamo metodo za potrditev starosti. Če je starost<18, then an exception is thrown to indicate the age is not valid.
Klavzula o metanju
Videli smo poskusni blok za razglasitev izjem. Vsebuje kodo, ki lahko povzroči izjeme. Obstaja še en način razglasitve izjeme, in sicer z uporabo ključne besede 'vrže'.
Izjava o izjemi z uporabo ključne besede 'throws' sporoča programerju, da za ključno besedo 'throws' morda obstaja izjema, programer pa mora za to izjemo zagotoviti ustrezno kodo obdelovalca, da ohrani normalen pretok programa.
Vendar se postavlja vprašanje, zakaj potrebujemo ključno besedo 'vrže', ko imamo zanesljivejši poskusni blok za prijavo in obravnavo izjem?
Eden od razlogov je, ker se število izjem, ki bi lahko nastale, povečuje, povečuje se tudi število ulovnih blokov, ki obravnavajo izjeme, saj lahko en ulovni blok obravnava samo eno izjemo.
nedefinirano sklicevanje na funkcijo c ++
Podobno, če je v programu veliko metod in ima vsaka metoda številne izjeme, bo koda postala po nepotrebnem dolga in neobvladljiva.
Izjava o izjemi s ključno besedo throws v podpisu metode in nato obdelava klica metode z uporabo try-catch se zdi izvedljiva rešitev.
Druga prednost prijave izjem z uporabo ključne besede throws je, da smo prisiljeni obravnavati izjeme. Če za prijavljeno izjemo ne zagotovimo vodnika, bo program povzročil napako.
Splošna sintaksa ključne besede throws je naslednja:
return_type method_name() throws exception_class_name{ //method code }
Zdaj izvedimo program Java za prikaz ključne besede 'vrže'.
V tem programu imamo razred Example_throw, v katerem imamo metodo testMethod. V podpisu te testMethod z uporabo ključne besede throws razglasimo dve izjemi IOException in Arithmetic Exception. Nato v glavni funkciji vržene izjeme obdela blok catch.
import java.io.*; class Example_Throw { //declare exception using throws in the method signature void testMethod(int num) throws IOException, ArithmeticException{ if(num==1) throw new IOException('IOException Occurred'); else throw new ArithmeticException('ArithmeticException'); } }class Main{ public static void main(String args()){ try{ //this try block calls the above method so handle the exception Example_Throw obj=new Example_Throw(); obj.testMethod(1); }catch(Exception ex){ System.out.println(ex); } } }
Izhod
Pogosto zastavljena vprašanja
V # 1) Kdaj uporabiti metanje VS try-catch v Javi?
Odgovor: Ključna beseda 'throws' se uporablja za razglasitev izjeme s podpisom metode. Ključna beseda throw se uporablja za izrecno vrženje izjeme. Blok try-catch se uporablja za obravnavo izjem, ki jih vržejo drugi.
V # 2) Ali lahko uporabimo met, poskusimo ujeti na en sam način?
Odgovor: Ne. Izjeme ne morete vrniti in jo tudi ujeti na isti način. Izjemo, ki je deklarirana z uporabo vrže, je treba obravnavati v klicni metodi, ki prikliče metodo, ki je vrgla izjemo.
V # 3) Kaj se zgodi, ko ulovni blok vrže izjemo?
Odgovor: Ko se v blok catch uvrsti izjema, program ustavi izvajanje. V primeru, da mora program nadaljevati, mora obstajati ločen blok try-catch, ki bo obravnaval izjemo, povzročeno v catch bloku.
V # 4) Kaj je Java-poskusiti-ujeti-končno?
Odgovor: Blok try-catch-konačno vsebuje tri bloke, to je try block, catch block in nazadnje blok.
Blok poskusi vsebuje kodo, ki bi lahko povzročila izjemo. Blok ulova vsebuje obdelovalec izjem za izjeme v poskusnem bloku. Končni blok vsebuje kritično kodo, ki se bo izvedla ne glede na to, ali je prišlo do izjeme ali ne.
V # 5) Ali lahko končno blokirate poskusni ulov?
Odgovor: Da, če imamo kodo za čiščenje, ki lahko vrže izjemo v zadnji blok, lahko imamo poskusni blok. Vendar je videti grdo.
Zaključek
V tej vadnici smo razpravljali o različnih ključnih besedah, ki se uporabljajo pri obdelavi izjem v Javi. Razpravljali smo o ključnih besedah, kot so poskus, ulov, končno, metanje in metanje.
Koda, ki bo morda vrgla izjemo, je zaprta v poskusnem bloku, catch pa je vodnik za izjemo. Blok »Končno« izvede kodo, ki je vanjo zaprta, ne glede na to, ali je izjema vržena ali ne. Blok Končno praviloma sledi bloku poskus ali poskus-ulov.
Ključno besedo throws uporabljamo za razglasitev izjem s podpisom metode in throw se eksplicitno uporablja za metanje izjem. Ponavadi uporabljamo ključno besedo throw, da vržemo izjeme po meri.
=> Tukaj si oglejte Perfect Java Training Guide.
Priporočeno branje
- Java izjeme in obravnava izjem z primeri
- Kako ravnati z izjemo ArrayIndexOutOfBoundsException v Javi?
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- Obravnava izjem JDBC - Kako ravnati z izjemami SQL
- Vadnica za ravnanje z izjemami C # s primeri kode
- Popoln vodnik za ravnanje z izjemami PL SQL s primeri
- Obravnava izjem v jeziku C ++
- Python Try Except - Python obravnava izjemo s primeri