try catch finally
U ovom uputstvu razmotrit ćemo razne ključne riječi korištene u Javi za rukovanje iznimkama, poput Pokušaj, Uhvati, Napokon, Baci i Baci s primjerima:
U našim prethodnim vodičima vidjeli smo osnove rukovanja iznimkama na Javi, zajedno s raznim iznimkama koje podržava klasa Java Exception. Također smo detaljno razgovarali o NullPointerExceptionu.
Iznimke u svoj program možemo uključiti korištenjem određenih ključnih riječi koje se pružaju na Javi. Te ključne riječi definiraju različite blokove koda koji olakšavaju definiranje i rukovanje iznimkama.
=> Posjetite ovdje za ekskluzivnu seriju udžbenika za Java.
Što ćete naučiti:
Pokušajte, uhvatite, konačno u Javi
Ključne riječi u nastavku koriste se u Javi za rukovanje iznimkama.
- Probati
- Ulov
- Konačno
- Bacanje
- Baca
Sljedeća tablica ukratko opisuje ove ključne riječi.
Ključna riječ | Opis |
---|---|
Probati | Blok koda koji bi mogao dovesti do iznimke navodimo u posebnom bloku s ključnom riječi 'Try'. |
Ulov | Kada se podigne iznimka, program mora uhvatiti. To se radi pomoću ključne riječi 'catch'. Dakle, catch blok slijedi try blok koji pokreće iznimku. Ključnu riječ catch uvijek treba koristiti s pokušajem. |
Konačno | Ponekad u našem programu imamo važan kôd koji treba izvršiti bez obzira na to je li izuzetak izbačen ili ne. Ovaj je kod smješten u poseban blok koji započinje s ključnom riječi „Napokon“. Blok Final slijedi blok Try-catch. |
Bacanje | Ključna riječ 'baciti' koristi se za izričito bacanje iznimke. |
Baca | Ključna riječ 'Baca' ne donosi iznimku, ali se koristi za deklariranje iznimki. Ova se ključna riječ označava da bi se u programu ili metodi mogla pojaviti iznimka. |
U ovom uputstvu detaljno ćemo razmotriti sve gore navedene ključne riječi zajedno s primjerima programiranja.
Pokušajte blokirati u Javi
Kad god pišemo program, mogao bi postojati kod za koji sumnjamo da bi mogao izuzeti. Na primjer, mogli bismo sumnjati da u kodu može postojati operacija 'podjela s nulom' koja će izuzeti.
Ovaj kôd koji može stvoriti iznimku zatvoren je u blok s ključnom riječi 'pokušaj'. Dakle, blok try sadrži kôd ili skup izjava koji mogu stvoriti iznimku.
Opća sintaksa bloka try je sljedeća:
try{ //set of statements that can raise exception }
Stoga, ako programer misli da će određene izjave stvoriti iznimke, tada ih stavite u blok try. Imajte na umu da se ostatak koda ne izvršava kada se izuzetak dogodi kod određene naredbe u bloku try.
Kada se u bloku try pojavi izuzetak u određenom izrazu, tada kontrola izlazi i program se naglo završava. Da bismo spriječili nagli prekid programa, trebali bismo se “pozabaviti” ovom iznimkom. Ovo rukovanje vrši se pomoću ključne riječi 'catch'. Dakle, blok try uvijek prati blok catch.
Catch Block u Javi
Za obradu iznimki koristimo blok catch. Ovo je blok s ključnom riječi 'catch'. Blok catch slijedi blok try.
Kad god se u bloku try dogodi iznimka, tada se izvršava kod u bloku catch koji odgovara iznimci.
Općenita sintaksa catch bloka je:
catch (Exception e){ //code to handle exception e }
Općenito, deklarirana iznimka mora biti nadređena klasa svih iznimki, tj. Iznimka. Ali ako postoji više od jedne iznimke, možemo također napisati određene vrste iznimki ili generirane iznimke.
Dalje ćemo razgovarati o bloku try-catch. Imajte na umu da za svaki pokušaj bloka možemo imati više blokova ulova.
Try-Catch Java
Općenita sintaksa bloka try-catch prikazana je u nastavku:
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
Blok try može imati više redaka koda koji može stvoriti višestruke iznimke. Svakom od ovih iznimki upravlja neovisni blok ulova.
Generički rukovatelj iznimkama, objekt e klase Exception može se nositi sa svim iznimkama, ali ako želimo obraditi određene iznimke, tada je poželjno navesti generički rukovatelj iznimkama kao zadnji blok catch.
Primjer Java Try Catch
Sada ćemo demonstrirati try-catch blok na Javi. Ovdje u bloku try definiramo operaciju podjele. Dijelitelj je nula. Tako izjava koja dijeli dva broja dovodi do aritmetičke iznimke. Imamo blok catch koji definira rukovatelj za aritmetičku iznimku.
Slijedi primjer 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.'); } }
Izlaz
najbolja mjesta za besplatno gledanje animea na mreži
Hvatanje višestrukih iznimaka
Kao što je već spomenuto, blok try može sadržavati kod koji otvara više od jedne iznimke. U ovom slučaju trebat će nam više od jednog bloka catch da bismo obrađivali svaku iznimku. Nakon jednog bloka pokušaja može slijediti više blokova ulova. Svaki blok catch obrađivat će neovisne iznimke.
U slučaju više blokova ulova, moramo upamtiti sljedeće točke:
- U Java programu, u bilo kojem trenutku vremena, može se dogoditi samo jedna iznimka. Također, u bilo kojem trenutku izvršava se samo jedan catch block.
- Višestruki blokovi ulova trebaju biti poredani na takav način da blok ulova za najkonkretniju iznimku treba biti na prvom mjestu, a zatim općenito.
Na primjer, ako imamo ArithmeticException i općenitu iznimku, tada će na prvo mjesto doći obrada bloka catch ArithmeticException, a nakon toga iznimka obrade bloka catch.
Primjer u nastavku prikazuje više blokova 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'); } }
Izlaz
U gore navedenom programu podiže se ArithmeticException koji je uhvaćen u prvom bloku ulova. Da ovaj blok ulova nije naveden, tada bi se iznimka proširila na generalizirani blok ulova.
Izmijenimo malo gornji program tako da blok try stvori dvije iznimke. Sada da vidimo izlaz.
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'); } }
Izlaz
Ako vidimo ovaj izlaz, prikazuje ArrayIndexOutOfBoundsException koji se baca. To je zato što se prvo izvršava naredba koja pokreće ArrayIndexOutOfBoundsException. Iznimka se baca i kontrola ide u odgovarajući blok catch.
Ugniježđena proba
Blok pokušaja unutar drugog bloka proba naziva se ugniježđeni blok pokušaja. Takve su nam strukture potrebne u određenim situacijama kada dio koda sadržan u pokušaj kodu može biti takav da neki retci stvaraju određene iznimke, a drugi dio koda potpuno drugačiju iznimku.
U slučaju ugniježđenih proba blokova, prvo se izvršava najunutarnji pokušaj bloka i obrađuje se iznimka. Ako najunutarnji proba blok nema odgovarajući blok catch, tada se širi za jednu razinu do nadređenog bloka try. Na ovaj se način iznimka širi prema gore dok se ne pronađe odgovarajući rukovatelj iznimkama.
Ako ne postoji rukovatelj iznimkom koji se podudara s iznimkom, tada se program naglo prekida sa sistemski generiranom porukom.
Općenita sintaksa ugniježđenog pokušaj bloka dana je u nastavku:
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
Primijenimo program za demonstraciju ugniježđenog 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'); } }
Izlaz
U gornjem programu imamo dva pokušajna bloka zatvorena u glavnom pokušajnom bloku. Oba unutarnja pokušajna bloka imaju kôd koji podiže ArithmeticException. No, osigurali smo odgovarajući blok catch samo za prvi blok, a ne i za drugi blok pokušaja.
Stoga drugi blok širi svoju iznimku na glavni pokušaj bloka, a zatim ga obrađuje. To je vidljivo iz rezultata.
Napokon blokiraj u Javi
Do sada smo vidjeli blok try-catch i ugniježđeni try. Znamo da je kôd od kojeg se očekuje iznimka stavljen u blok try. Kada se dogodi iznimka, tada se ostatak koda u bloku try ne izvršava.
Ili se program naglo završava ako se ne obrađuje izuzetak ili se kontrola prosljeđuje obrađivaču izuzetaka.
U takvoj situaciji javlja se potreba za uključivanjem koda koji se izvršava bez obzira na to javlja li se iznimka ili ne. To znači da ćemo izvršiti dio koda čak i kada se dogodi iznimka, a također i kada se iznimka ne dogodi.
No kako blok try izlazi nakon podizanja iznimke, ovaj kôd ne možemo staviti u blok try. Slično tome, catch block ima rukovatelj iznimkom, pa to ne možemo staviti ni u catch block.
Stoga nam treba zasebni blok koji sadrži kôd koji se izvršava bez obzira na to javlja li se iznimka ili ne. Java nudi blok 'napokon' koji sadrži ovaj dio koda.
Stoga konačno blok u Javi može sadržavati kritične izjave koje treba izvršiti u programu. Izvršenje ovih izjava treba izvršiti čak i kad se dogodi iznimka ili ne.
Stoga ćemo u blok konačno staviti kôd poput zatvaranja veza, objekata streama itd. Ili bilo kojeg koda za čišćenje kako bi se mogli izvršiti čak i ako se dogodi iznimka.
Konačni blok u Javi obično se stavlja nakon bloka try or catch. Imajte na umu da block konačno ne može postojati bez bloka try. Kada se napokon uključi blok s try-catch, on postaje ' probaj-uhvati-napokon ' blok.
Možemo preskočiti napokon blok u kodu za rukovanje iznimkama. To znači da je konačno blokiranje neobavezno.
Ako blok try ne izazove nikakvu iznimku, konačno blok će se izvršiti nakon bloka try. Ako u bloku try postoji iznimka, tada će kontrola prvo prijeći na catch blok, a zatim konačno block.
Iznimka koja se javlja u konačno bloku ponaša se na isti način kao i bilo koja druga iznimka. Čak i ako blok try sadrži naredbu return ili izjave grananja poput break and continue, tada će napokon blok i dalje biti izveden.
Imajući ove točke na umu, nastavimo s općom sintaksom i primjerima konačno block.
Opća sintaksa bloka konačno je sljedeća:
Pitanja i odgovori .net intervjua
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
Iako se konačno blok uvijek izvršava, postoje određene situacije ili slučajevi u kojima se ne izvršava.
Ovo su sljedeći slučajevi:
- Kad je nit mrtva.
- Kada se koristi metoda System.exit ().
- Kada se dogodi iznimka u konačno bloku.
Primijenimo nekoliko programa da demonstriramo konačno blokiranje.
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...'); } }
Izlaz
Gornji program prikazuje blok try-catch-napokon. U bloku try izvodi se valjana operacija i stoga se ne izuzima iznimka. Stoga se kontrola ne prenosi za hvatanje iz pokušaja već za konačno blokiranje.
Sljedeći je program još jedan primjer bloka try-catch-konačno, ali u ovom slučaju izuzetak se ubacuje u blok try jer izvodimo operaciju dijeljenja s nulom. Stoga se konačno izvršava blok nakon pokušaja 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...'); } }
Izlaz
Bacite iznimku na Javi
Java nudi ključnu riječ 'bacanje' pomoću koje izričito možemo izbaciti iznimke u kodu. Na primjer, ako provjeravamo aritmetičke operacije i želimo uspostaviti neke iznimke nakon provjere operanda, to možemo učiniti pomoću ključne riječi ‘throw’.
Korištenjem ključne riječi throw možemo baciti potvrđene ili neprovjerene iznimke. Ključna riječ throw također se koristi za bacanje prilagođenih izuzetaka.
Opća sintaksa ključne riječi throw je:
throw exception; or throw new exception_class('error message');
Slijedi primjer programa za demonstraciju ključne riječi 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...'); } }
Izlaz
U gore navedenom programu koristimo metodu za potvrđivanje dobi. Ako je dob<18, then an exception is thrown to indicate the age is not valid.
Klauzula o bacanju
Vidjeli smo pokušaj blokiranja za deklariranje iznimaka. Sadrži kôd koji može stvoriti iznimke. Postoji još jedan način za prijavljivanje iznimke, a to je upotreba ključne riječi 'bacanja'.
Izjava o iznimci korištenjem ključne riječi 'throws' govori programeru da možda postoji iznimka navedena nakon ključne riječi 'throws', a programer bi trebao pružiti odgovarajući kôd rukovatelja za ovu iznimku kako bi održao normalan tijek programa.
Međutim, postavlja se pitanje zašto nam je potrebna ključna riječ 'bacanja' kada imamo pouzdaniji pokušaj-catch blok za deklariranje i rukovanje iznimkama?
Jedan od razloga je što se povećava broj izuzetaka koji bi se mogli dogoditi, tako se povećava i broj blokova catch koji obrađuje iznimke jer jedan catch block može obraditi samo jednu iznimku.
Slično tome, ako u programu postoji mnogo metoda, a svaka metoda ima brojne iznimke, tada će kôd postati nepotrebno dug i njime se ne može upravljati.
Stoga se deklariranje iznimke s ključnom riječi throw u potpisu metode, a zatim obrada poziva metode pomoću try-catch čini održivim rješenjem.
Još jedna prednost deklariranja iznimaka pomoću ključne riječi throws je ta što smo prisiljeni obraditi iznimke. Ako ne pružimo obrađivač za deklariranu iznimku, program će iznijeti pogrešku.
Opća sintaksa ključne riječi throws je sljedeća:
return_type method_name() throws exception_class_name{ //method code }
Primijenimo sada Java program za demonstraciju ključne riječi 'bacanja'.
U ovom programu imamo klasu Example_throw u kojoj imamo metodu testMethod. U potpisu ove testMethod deklariramo dvije iznimke IOException i Arithmetic Exception pomoću ključne riječi throws. Tada se u glavnoj funkciji izbačene iznimke obrađuju ulovnim blokom.
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); } } }
Izlaz
Često postavljana pitanja
P # 1) Kada koristiti bacanje VS try-catch u Javi?
Odgovor: Ključna riječ 'throws' koristi se za deklariranje iznimke s potpisom metode. Ključna riječ throw koristi se za izričito bacanje iznimke. Blok try-catch koristi se za rukovanje iznimkama koje su bacili drugi.
P # 2) Možemo li koristiti bacanja, pokušati uhvatiti na jedan način?
Odgovor: Ne. Ne možete izbaciti izuzetak i također ga uhvatiti na isti način. Iznimka koja se deklarira pomoću bacanja treba se rukovati u pozivajućoj metodi koja poziva metodu koja je izbacila iznimku.
P # 3) Što se događa kada block catch izbaci iznimku?
Odgovor: Kada se u blok catch ubaci izuzetak, program će zaustaviti izvršenje. U slučaju da se program mora nastaviti, tada mora postojati zasebni pokušaj-catch blok za obradu iznimke postavljene u catch bloku.
P # 4) Što je try-catch-konačno u Javi?
Odgovor: Blok try-catch-konačno sadrži tri bloka, tj. Try block, catch block i konačno block.
Blok try sadrži kôd koji bi mogao izuzeti. Blok ulova sadrži rukovatelj iznimkama za iznimke u bloku proba. Konačni blok sadrži kritični kôd koji će se izvršiti bez obzira je li se iznimka dogodila ili nije.
P # 5) Može li se konačno blokirati proba-catch?
Odgovor: Da, ako imamo kod za čišćenje koji bi mogao ubaciti iznimku u konačno blok, onda možemo imati blok try-catch. Međutim, izgleda ružno.
Zaključak
U ovom uputstvu raspravljali smo o raznim ključnim riječima koje se koriste u rukovanju iznimkama na Javi. Razgovarali smo o ključnim riječima poput try, catch, konačno, bacanje i bacanje.
Kôd koji će eventualno izbaciti iznimku zatvoren je u blok try, a catch pruža obradu iznimke. Konačni blok izvršava kod koji je u njemu zatvoren bez obzira na to je li izuzetak izbačen ili ne. Konačni blok općenito slijedi blok try ili try-catch.
Koristimo ključnu riječ throws da bismo deklarirali iznimke s potpisom metode, a throw se eksplicitno koristi za bacanje iznimki. Za bacanje prilagođenih izuzetaka obično koristimo ključnu riječ throw.
=> Ovdje pogledajte Savršeni vodič za Java obuku.
Preporučena literatura
- Java iznimke i rukovanje iznimkama s primjerima
- Kako postupati s ArrayIndexOutOfBoundsException u Javi?
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- Rukovanje iznimkama JDBC - Kako postupati s SQL iznimkama
- Vodič za rukovanje iznimkama za C # s primjerima koda
- Cjelovit vodič za rukovanje iznimkama PL SQL-a s primjerima
- Rukovanje iznimkama na C ++
- Python Try Except - obrada iznimke s Pythonom s primjerima