Co je to výjimka v Javě?
Výjimkou v Javě je událost, která přerušuje provádění instrukcí programu a narušuje normální průběh provádění programu. Jedná se o objekt, který zabalí informace o chybové události, ke kterým došlo v rámci metody, a je předán runtime systému. V Javě se výjimky používají hlavně k indikaci různých typů chybových stavů.
V tomto výukovém programu se naučíte
- Co je to výjimka?
- Proč potřebujeme výjimku?
- Jak zpracovat výjimku
- Zkuste Catch Block
- Hierarchie tříd Java Exception
- Java konečně blokuje
Existují dva typy chyb:
- Zkompilovat časové chyby
- Chyby za běhu
Chyby kompilace lze znovu klasifikovat znovu na dva typy:
- Chyby syntaxe
- Sémantické chyby
Příklad chyb syntaxe:
Místo deklarace
int a;
omylem jste to deklarovali jako in a;
pro který kompilátor hodí chybu.
Příklad: Deklarovali jste proměnnou
int a;
a po několika řádcích kódu znovu deklarujete celé číslo jako int a;
. Všechny tyto chyby jsou zvýrazněny při kompilaci kódu.
Příklad chyb za běhu
Chyba za běhu se nazývá chyba výjimek . Je to jakákoli událost, která přeruší normální tok provádění programu.
Příkladem výjimek jsou aritmetická výjimka, výjimka Nullpointer, dělení nulou atd.
Výjimky v Javě jsou něco, co je mimo kontrolu vývojářů.
Pokud video není přístupné, klikněte sem
Proč potřebujeme výjimku?
Předpokládejme, že jste kódovali program pro přístup k serveru. Věci fungovaly dobře, když jste vyvíjeli kód.
Během skutečného produkčního běhu je server nefunkční. Když se váš program pokusil o přístup, vyvolá se výjimka.
Jak zpracovat výjimku
Zatím jsme viděli, výjimka je mimo kontrolu vývojáře. Obviňování selhání kódu z environmentálních problémů však není řešením. Potřebujete robustní programování, které se postará o výjimečné situace. Takový kód je známý jako obslužný program výjimek.
V našem příkladu by bylo dobré zpracování výjimek, když je server nefunkční, připojit se k záložnímu serveru.
Chcete-li to implementovat, zadejte svůj kód pro připojení k serveru (pomocí tradičních podmínek if a else).
Zkontrolujete, zda je server nefunkční. Pokud ano, napište kód pro připojení k záložnímu serveru.
Taková organizace kódu pomocí smyček „if“ a „else“ není účinná, když má váš kód několik výjimek Java pro zpracování.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Zkuste Catch Block
Java poskytuje zabudované výjimečné zacházení.
- Normální kód jde do bloku TRY .
- Kód pro zpracování výjimek přejde do bloku CATCH
V našem příkladu blok TRY bude obsahovat kód pro připojení k serveru. Blok CATCH bude obsahovat kód pro připojení k záložnímu serveru.
V případě, že je server funkční, bude kód v bloku CATCH ignorován. V případě, že server nefunguje, vyvolá se výjimka a provede se kód v bloku catch.
Takto se tedy v Javě zachází s výjimkou.
Syntaxe pro používání funkce try & catch
try{statement(s)}catch (exceptiontype name){statement(s)}
Příklad
Krok 1) Zkopírujte následující kód do editoru
class JavaException {public static void main(String args[]){int d = 0;int n = 20;int fraction = n/d;System.out.println("End Of Main");}}
Krok 2) Uložte soubor a zkompilujte kód. Spusťte program pomocí příkazu, Java JavaException
Krok 3) Aritmetická výjimka - dělení nulou je zobrazeno níže pro řádek # 5 a řádek # 6 se nikdy neprovede
Krok 4) Nyní se podívejme, jak nám zkouška a chycení pomůže zvládnout tuto výjimku. Dáme výjimku způsobující řádek kódu do bloku try , následovaný blokem catch . Zkopírujte následující kód do editoru.
class JavaException {public static void main(String args[]) {int d = 0;int n = 20;try {int fraction = n / d;System.out.println("This line will not be Executed");} catch (ArithmeticException e) {System.out.println("In the catch Block due to Exception = " + e);}System.out.println("End Of Main");}}
Krok 5) Uložte, zkompilujte a spusťte kód. Získáte následující výstup
Jak pozorujete, je zpracována výjimka a je spuštěn také poslední řádek kódu. Všimněte si také, že řádek # 7 nebude proveden, protože jakmile se vyvolá výjimka, tok kontrolních skoků do bloku zachycení.
Poznámka: Objekt AritmeticException "e" obsahuje informace o výjimce, která nastala, což může být užitečné při provádění akcí obnovy.
Hierarchie tříd Java Exception
Po provedení jednoho příkazu catch se ostatní obejdou a spuštění pokračuje po bloku try / catch. Vnořené bloky úlovků se řídí hierarchií výjimek.- Všechny třídy výjimek v Javě rozšiřují třídu 'Throwable'. Throwable má dvě podtřídy, Error a Exception
- Třída Error definuje výjimku nebo problémy, u nichž náš program za normálních okolností neočekává, například Chyba paměti, Chyba hardwaru, Chyba JVM atd.
- Třída Exception představuje výjimky, které lze zpracovat naším programem, a náš program lze z této výjimky obnovit pomocí bloku try and catch
- Výjimka za běhu je podtřídou třídy výjimek. Výjimka tohoto typu představuje výjimku, ke které dochází v době běhu a kterou nelze sledovat v době kompilace. Vynikajícím příkladem je dělení nulovou výjimkou nebo výjimkou s nulovým ukazatelem atd
- Výjimka IO je generována během operací vstupu a výstupu
- Přerušené výjimky v Javě jsou generovány během vícenásobných vláken.
Krok 1) Zkopírujte následující kód do editoru.
class JavaException {public static void main(String args[]) {try {int d = 1;int n = 20;int fraction = n / d;int g[] = {1};g[20] = 100;}/*catch(Exception e){System.out.println("In the catch block due to Exception = "+e);}*/catch (ArithmeticException e) {System.out.println("In the catch block due to Exception = " + e);} catch (ArrayIndexOutOfBoundsException e) {System.out.println("In the catch block due to Exception = " + e);}System.out.println("End Of Main");}}
Krok 2) Uložte soubor a zkompilujte kód. Spusťte program pomocí příkazu, Java JavaException .
Krok 3) Je vygenerována výjimka ArrayIndexOutOfBoundsException. Změňte hodnotu int d na 0. Uložte, zkompilujte a spusťte kód.
Krok 4 ) Musí být vygenerována ArithmeticException.
Krok 5) Odkomentujte řádek # 10 na řádek # 12. Uložte, zkompilujte a spusťte kód.
Krok 6) Chyba kompilace? Důvodem je, že Exception je základní třída ArithmeticException Exception. Libovolná výjimka, která je vyvolána ArithmeticException, může být zpracována také třídou Exception. Takže blokovací blok ArithmeticException nikdy nedostane šanci na provedení, což ji činí nadbytečnou. Proto chyba kompilace.
Java konečně blokuje
Konečný blok je proveden bez ohledu na to, že byla v try bloku vyvolána výjimka . Použití s blokem try je volitelné .
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
V případě, že se v bloku try vyvolá výjimka, nakonec se blok provede po provedení bloku catch.
Příklad
Krok 1) Zkopírujte následující kód do editoru.
class JavaException {public static void main(String args[]){try{int d = 0;int n =20;int fraction = n/d;}catch(ArithmeticException e){System.out.println("In the catch block due to Exception = "+e);}finally{System.out.println("Inside the finally block");}}}
Krok 2) Uložte, zkompilujte a spusťte kód.
Krok 3) Očekávaný výstup. Nakonec je blok spuštěn, i když je vyvolána výjimka.
Krok 4) Změňte hodnotu proměnné d = 1. Uložte, zkompilujte a spusťte kód a sledujte výstup. Spodní část formuláře
Shrnutí :
- Výjimka je chybě při běhu , které přeruší normální tok programu execution.Disruption během provádění programu se označuje jako chyba nebo výjimku.
- Chyby se dělí do dvou kategorií
- Časové chyby kompilace - chyby syntaxe, sémantické chyby
- Chyby za běhu - výjimka
- Robustní program by měl zpracovat všechny výjimky a pokračovat ve svém normálním průtoku provádění programu. Java poskytuje zabudovanou výjimečnou metodu zpracování
- Obslužná rutina výjimky je sada kódu, který zpracovává výjimku . Výjimky lze v Javě řešit pomocí try & catch.
- Vyzkoušejte blok : Normální kód jde na tento blok.
- Catch block : Pokud je chyba v normálním kódu, přejde do tohoto bloku