Zpracování výjimek Java
V čem je výjimka Java?
Výjimka v Java je událost, která přeruší provádění programových instrukcí a naruší normální průběh provádění programu. Je to objekt, který obaluje informace o chybové události, která se vyskytla v rámci metody, a je předána běhovému systému. V Java, výjimky se používají hlavně pro indikaci různých typů chybových stavů.
Existují dva typy chyb:
- Chyby času kompilace
- Runtime chyby
Chyby v době kompilace lze opět rozdělit do dvou typů:
- Chyby syntaxe
- Sémantické chyby
Příklad syntaxe:
Místo prohlášení int a;
omylem jsi to prohlásil za in a;
pro který kompilátor vyvolá 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
Runtime chyba se nazývá an b) Výjimky chyba. Je to jakákoli událost, která přeruší normální průběh provádění programu. Příklady výjimek jsou aritmetická výjimka, výjimka nulového ukazatele, výjimka Dělit nulou atd. Výjimky v Java jsou něco, co je mimo kontrolu vývojářů.
klikněte zde pokud video není přístupné
Proč potřebujeme výjimku?
Předpokládejme, že jste zakó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 mimo provoz. Když se k němu váš program pokusil získat přístup, vyvolá se výjimka.
Jak zacházet s výjimkami
Zatím jsme viděli, že výjimka je mimo kontrolu vývojáře. Ale obviňovat selhání kódu z environmentálních problémů není řešení. Potřebujete Robustní programování, které se postará o výjimečné situace. Takový kód je známý jako Obsluha výjimek.
V našem příkladu by dobrým zpracováním výjimek bylo připojení k záložnímu serveru, když je server mimo provoz.
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 mimo provoz. Pokud ano, napište kód pro připojení k záložnímu serveru. Taková organizace kódu pomocí smyčky „if“ a „else“ není účinná, pokud má váš kód více java výjimky zvládnout.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Zkuste Catch Block
Java poskytuje vestavěnou výjimečnou manipulaci.
- Normální kód jde do a TRY blok.
- Kód zpracování výjimek jde do CATCH blokovat
V našem příkladu bude blok TRY 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 zapnutý, bude kód v bloku CATCH ignorován. V případě, že je server mimo provoz, vyvolá se výjimka a provede se kód v bloku catch.
Takto je tedy řešena výjimka Java.
Syntaxe pro použití 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 JavaVýjimka
Krok 3) Aritmetická výjimka – dělení nulou je zobrazeno jako níže pro řádek #5 a řádek #6 se nikdy neprovede
Krok 4) Nyní se podívejme, jak nám pokus a chycení pomůže zvládnout tuto výjimku. Výjimku způsobující řádek kódu vložíme do a vyzkoušet blok, následovaný a úlovek blok. 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 vidíte, výjimka se zpracuje a provede se také poslední řádek kódu. Všimněte si také, že řádek #7 nebude proveden, protože jakmile je vyvolána výjimka, tok řízení skočí do bloku záchytu.
Poznámka: Objekt AritmeticException „e“ nese informace o výjimce, ke které došlo, což může být užitečné při provádění akcí obnovy.
Java Hierarchie tříd výjimek
Po provedení jednoho příkazu catch jsou ostatní vynechány a provádění pokračuje po bloku try/catch. Vnořené bloky catch sledují hierarchii výjimek.
- Všechny třídy výjimek v Java rozšířit třídu 'Vrhatelná'. Throwable má dvě podtřídy, Error a Exception
- Třída Error definuje výjimku nebo problémy, které náš program za normálních okolností neočekává, že se vyskytnou, například chyba paměti, chyba hardwaru, chyba JVM atd.
- Třída Exception představuje výjimky, které může náš program zpracovat, a náš program lze z této výjimky obnovit pomocí bloku try and catch
- Runtime výjimka je podtřídou třídy výjimky. Výjimka tohoto typu představuje výjimku, která se vyskytuje v době běhu a kterou nelze sledovat v době kompilace. Vynikajícím příkladem toho samého je dělení nulovou výjimkou nebo výjimkou s nulovým ukazatelem atd
- Výjimka IO je generována během vstupních a výstupních operací
- Přerušené výjimky v Java, je generován během více vláken.
Příklad: Pochopit vnořování bloků pokusu a chycení
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, Jáva JavaVýjimka.
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 výjimka ArithmeticException.
Krok 5) Odkomentujte řádek #10 až řádek #12. Uložte, zkompilujte a spusťte kód.
Krok 6) Chyba kompilace? Je to proto, že Exception je základní třídou AritmeticException Exception. Jakákoli výjimka, která je vyvolána ArithmeticException, může být také zpracována třídou Exception. Blok catch ArithmeticException tedy nikdy nedostane šanci být proveden, takže je nadbytečný. Proto chyba kompilace.
Java Konečně Blok
Poslední blok je provedeny bez ohledu na vznesenou výjimku v bloku try. to je volitelný použít s blokem try.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
V případě, že je v bloku try vyvolána výjimka, je nakonec blok proveden 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 se blok provede, 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í
- An Výjimkou je chyba za běhu která přeruší normální průběh provádění programu. Přerušení během provádění programu se označuje jako chyba nebo výjimka.
- Chyby jsou rozděleny do dvou kategorií
- Chyby při kompilaci – Syntaktické chyby, sémantické chyby
- Runtime chyby - výjimka
- A robustní program by měl zvládnout všechny výjimky a pokračovat v normálním průběhu provádění programu. Java poskytuje vestavěný výjimečný způsob manipulace
- Exception Handler je sada kódů, které zpracovává výjimku. Výjimky lze řešit v Java pomocí try & catch.
- Zkuste blokovat: Normální kód jde na tento blok.
- Záchytný blok: Pokud je v normálním kódu chyba, přejde do tohoto bloku