logo

Typy výjimek v Javě

v Javě, výjimka je událost, která nastane během provádění programu a naruší normální tok instrukcí programu. Chyby nebo chyby, které nechceme a omezují náš program v normálním provádění kódu, jsou označovány jako výjimky . V této části se zaměříme na typy výjimek v Javě a rozdíly mezi nimi.

Výjimky lze kategorizovat dvěma způsoby:

  1. Vestavěné výjimky
    • Zaškrtnutá výjimka
    • Nezaškrtnutá výjimka
  2. Uživatelsky definované výjimky
Typy výjimek v Javě

Vestavěná výjimka

Výjimky které jsou již dostupné v Java knihovny jsou označovány jako vestavěná výjimka . Tyto výjimky dokážou definovat chybovou situaci, takže můžeme pochopit důvod získání této chyby. Lze jej rozdělit do dvou širokých kategorií, tj. zaškrtnuté výjimky a nezaškrtnutá výjimka .

Zaškrtnutá výjimka

Kontrolovány se volají výjimky kompilace výjimky, protože tyto výjimky kontroluje kompilátor v době kompilace. Kompilátor zajistí, zda programátor výjimku zpracuje nebo ne. Výjimku by měl zpracovat programátor; jinak systém ukázal chybu kompilace.

CheckedExceptionExample.java

 import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } } 

Ve výše uvedeném kódu se snažíme číst Ahoj.txt soubor a zobrazit jeho data nebo obsah na obrazovce. Program vyvolá následující výjimky:

  1. The FileInputStream (název souboru) konstruktor vyvolá FileNotFoundException to je zaškrtnutá výjimka.
  2. The číst() metoda FileInputStream třída hodí IOException .
  3. The zavřít() metoda také vyvolá IOException.

Výstup:

Typy výjimek v Javě

Jak chybu vyřešit?

V zásadě existují dva způsoby, jak tyto chyby vyřešit.

1) Výjimky se vyskytují v hlavní metodě. Těchto chyb při kompilaci se můžeme zbavit deklarováním výjimky v metodě main using hody Deklarujeme pouze IOException, nikoli FileNotFoundException, kvůli vztahu dítě-rodič. Třída IOException je nadřazenou třídou FileNotFoundException, takže tato výjimka bude automaticky pokryta IOException. Výjimku vyhlásíme následujícím způsobem:

Greatandhra
 class Exception{ public static void main(String args[]) throws IOException { ... ... } 

Pokud zkompilujeme a spustíme kód, chyby zmizí a my uvidíme data souboru.

Typy výjimek v Javě

2) Tyto výjimky můžeme také zpracovat pomocí Zkus chytit Způsob, který jsme použili výše, však není správný. Pro každý typ výjimky musíme dát smysluplnou zprávu. Díky tomu by bylo snadné pochopit chybu. Blok try-catch použijeme následujícím způsobem:

Exception.java

 import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } } 

Zobrazí se nám správná chybová zpráva 'Soubor nenalezen!' na konzole, protože v tomto umístění žádný takový soubor není.

Typy výjimek v Javě

Nezaškrtnuté výjimky

The nezaškrtnuté výjimky jsou přesně opačné než kontrolovány výjimky. Kompilátor nebude kontrolovat tyto výjimky v době kompilace. Jednoduše řečeno, pokud program vyvolá nekontrolovanou výjimku, a i když jsme ji nezpracovali nebo nedeklarovali, program by nehlásil chybu kompilace. Obvykle k tomu dochází, když uživatel během interakce s programem poskytne špatná data.

Poznámka: Třída RuntimeException je schopna vyřešit všechny nekontrolované výjimky kvůli vztahu dítě-rodič.

UncheckedExceptionExample1.java

 class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } } 

Ve výše uvedeném programu jsme vydělili 35 0. Kód by byl úspěšně zkompilován, ale za běhu vyvolá chybu ArithmeticException. Při dělení čísla 0 vyvolá výjimku dělení nulou, což je výjimka zrušte zaškrtnutí.

dynamické programování

Výstup:

Typy výjimek v Javě

UncheckedException1.java

 class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } } 

Výstup:

Typy výjimek v Javě

Ve výše uvedeném kódu se snažíme získat prvek umístěný na pozici 7, ale délka pole je 6. Kód se úspěšně zkompiluje, ale za běhu vyvolá výjimku ArrayIndexOutOfBoundsException.

Uživatelsky definovaná výjimka

v Jáva , již máme nějaké vestavěné třídy výjimek jako ArrayIndexOutOfBoundsException , NullPointerException , a Aritmetická výjimka . Tyto výjimky se mohou spouštět pouze za určitých předem definovaných podmínek. V Javě můžeme napsat vlastní třídu výjimky rozšířením třídy Exception. Můžeme vyvolat vlastní výjimku za konkrétní podmínky pomocí klíčového slova throw. Pro vytvoření uživatelem definované výjimky bychom měli mít základní znalosti a Zkus chytit blokovat a házet klíčové slovo .

Pojďme napsat a Java program a vytvořit uživatelem definovanou výjimku.

UserDefinedException.java

 import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } } 

Výstup:

Typy výjimek v Javě

Popis:

Ve výše uvedeném kódu jsme vytvořili dvě třídy, tj. UserDefinedException a Nová výjimka . The UserDefinedException má naši hlavní metodu a Nová výjimka class je naše uživatelsky definovaná třída výjimky, která se rozšiřuje výjimka . V Nová výjimka třídy, vytvoříme proměnnou X typu integer a přiřaďte mu hodnotu v konstruktoru. Po přiřazení hodnoty této proměnné vrátíme zprávu o výjimce.

xd xd význam

V UserDefinedException třídy jsme přidali a Zkus chytit blok. V sekci try vyvoláme výjimku, tj. Nová výjimka a předejte mu celé číslo. Hodnota bude předána třídě NewException a vrátí zprávu. Zachytíme tuto zprávu v bloku catch a ukážeme ji na obrazovce.

Rozdíl mezi zaškrtnutou a nezaškrtnutou výjimkou

Ano ne Zaškrtnutá výjimka Nezaškrtnutá výjimka
1. Tyto výjimky jsou kontrolovány v době kompilace. Tyto výjimky jsou také zpracovávány v době kompilace. Tyto výjimky jsou přesně opačné než zaškrtnuté výjimky. Tyto výjimky nejsou kontrolovány a zpracovávány v době kompilace.
2. Tyto výjimky jsou přímými podtřídami výjimky, ale nejsou rozšířeny z třídy RuntimeException. Jsou to přímé podtřídy třídy RuntimeException.
3. Kód dává chybu kompilace v případě, že metoda vyvolá kontrolovanou výjimku. Kompilátor není schopen zpracovat výjimku sám. Kód se zkompiluje bez jakékoli chyby, protože výjimky unikají upozornění kompilátoru. Tyto výjimky jsou výsledkem uživatelsky vytvořených chyb v programovací logice.
4. Tyto výjimky se většinou vyskytují, když je pravděpodobnost selhání příliš vysoká. Tyto výjimky vznikají většinou kvůli programátorským chybám.
5. Mezi běžné kontrolované výjimky patří IOException, DataAccessException, InterruptedException atd. Mezi běžné nekontrolované výjimky patří ArithmeticException, InvalidClassException, NullPointerException atd.
6. Tyto výjimky se šíří pomocí klíčového slova throws. Ty se šíří automaticky.
7. Pro zpracování kontrolované výjimky je nutné poskytnout blok try-catch a try-finally. V případě nezaškrtnuté výjimky to není povinné.

Chyby nebo chyby, které nechceme a omezují normální provádění programů, se nazývají výjimky .

ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions atd. patří do kategorie Vestavěná výjimka . Někdy vestavěné výjimky nestačí k vysvětlení nebo popisu určitých situací. Pro popis těchto situací musíme vytvořit vlastní výjimky vytvořením třídy výjimek jako podtřídy třídy Výjimka třída. Tyto typy výjimek spadají do kategorie Výjimka definovaná uživatelem .