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:

  1. Chyby času kompilace
  2. 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.

Java Manipulace s výjimkami

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.

Java Manipulace s výjimkami

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.

Java Manipulace s výjimkami

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.

  1. Normální kód jde do a TRY blok.
  2. Kód zpracování výjimek jde do CATCH blokovat

Zkuste Catch Block

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.

Zkuste Catch Block

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

Zkuste Catch Block

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.


Java Hierarchie 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