logo

Typy výnimiek v Jave

v Jave výnimkou je udalosť, ktorá nastane počas vykonávania programu a naruší normálny tok inštrukcií programu. Chyby alebo chyby, ktoré si neželáme a obmedzujú náš program v normálnom vykonávaní kódu, sa nazývajú výnimky . V tejto časti sa zameriame na typy výnimiek v jazyku Java a rozdiely medzi nimi.

Výnimky možno rozdeliť do dvoch kategórií:

  1. Vstavané výnimky
    • Začiarknutá výnimka
    • Nezačiarknutá výnimka
  2. Používateľom definované výnimky
Typy výnimiek v Jave

Vstavaná výnimka

Výnimky ktoré sú už dostupné v Java knižnice sa označujú ako vstavaná výnimka . Tieto výnimky sú schopné definovať chybovú situáciu, aby sme pochopili dôvod vzniku tejto chyby. Dá sa rozdeliť do dvoch širokých kategórií, t. skontrolované výnimky a nezaškrtnutá výnimka .

Začiarknutá výnimka

Skontrolované volajú sa výnimky kompilačný čas výnimky, pretože tieto výnimky kontroluje kompilátor v čase kompilácie. Kompilátor zabezpečuje, či programátor výnimku spracuje alebo nie. Výnimku by mal zvládnuť programátor; v opačnom prípade systém ukázal chybu kompilácie.

CheckedExceptionExample.java

java reťazec na celé číslo
 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(); } } 

Vo vyššie uvedenom kóde sa snažíme prečítať Ahoj.txt súbor a zobraziť jeho údaje alebo obsah na obrazovke. Program vyvolá nasledujúce výnimky:

  1. The FileInputStream (názov súboru) konštruktor hodí FileNotFoundException to je kontrolovaná výnimka.
  2. The čítať() metóda FileInputStream trieda hádže IOException .
  3. The Zavrieť() metóda tiež vyvolá IOException.

Výkon:

Typy výnimiek v Jave

Ako vyriešiť chybu?

V zásade existujú dva spôsoby, ktorými môžeme tieto chyby vyriešiť.

1) Výnimky sa vyskytujú v hlavnej metóde. Týchto chýb pri kompilácii sa môžeme zbaviť vyhlásením výnimky v hlavnej metóde pomocou hody Deklarujeme iba IOException, nie FileNotFoundException, kvôli vzťahu dieťa – rodič. Trieda IOException je nadradenou triedou FileNotFoundException, takže táto výnimka bude automaticky pokrývať IOException. Výnimku vyhlásime nasledujúcim spôsobom:

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

Ak skompilujeme a spustíme kód, chyby zmiznú a uvidíme údaje súboru.

algoritmus kmp
Typy výnimiek v Jave

2) Tieto výnimky môžeme zvládnuť aj pomocou Skús chytiť Spôsob, ktorý sme použili vyššie, však nie je správny. Pre každý typ výnimky musíme dať zmysluplnú správu. Týmto spôsobom by bolo ľahké pochopiť chybu. Blok try-catch použijeme nasledujúcim spôsobom:

Výnimka.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); } } } 

Uvidíme správne chybové hlásenie 'Súbor nenájdený!' na konzole, pretože v tomto umiestnení nie je žiadny takýto súbor.

123 film
Typy výnimiek v Jave

Nezačiarknuté výnimky

The nezačiarknuté výnimky sú presne opačné skontrolované výnimky. Kompilátor nebude kontrolovať tieto výnimky v čase kompilácie. Jednoducho povedané, ak program vyhodí nekontrolovanú výnimku, a aj keby sme ju nespracovali alebo nedeklarovali, program nevyhlási chybu pri kompilácii. Zvyčajne k tomu dôjde, keď používateľ poskytne zlé údaje počas interakcie s programom.

Poznámka: Trieda RuntimeException dokáže vyriešiť všetky nekontrolované výnimky z dôvodu vzťahu dieťa-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); } } 

Vo vyššie uvedenom programe sme vydelili 35 číslom 0. Kód by sa úspešne skompiloval, ale za behu vyvolá chybu ArithmeticException. Pri delení čísla 0 vyvolá výnimku delenia nulou, čo je výnimka so zrušením začiarknutia.

relácia vypršala

Výkon:

Typy výnimiek v Jave

UncheckedException1.java

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

Výkon:

Typy výnimiek v Jave

Vo vyššie uvedenom kóde sa snažíme získať prvok umiestnený na pozícii 7, ale dĺžka poľa je 6. Kód sa úspešne skompiluje, ale za behu vyhodí výnimku ArrayIndexOutOfBoundsException.

Používateľom definovaná výnimka

In Java , už máme nejaké vstavané triedy výnimiek ako ArrayIndexOutOfBoundsException , NullPointerException , a Aritmetická výnimka . Tieto výnimky sú obmedzené na spustenie za určitých vopred definovaných podmienok. V Jave môžeme napísať vlastnú triedu výnimky rozšírením triedy Exception. Pomocou kľúčového slova throw môžeme vyvolať vlastnú výnimku za konkrétnej podmienky. Na vytvorenie používateľom definovanej výnimky by sme mali mať základné znalosti na Skús chytiť blokovať a hodiť kľúčové slovo .

Napíšeme a Java program a vytvorte používateľom definovanú výnimku.

interné fungovanie hashmap

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ýkon:

Typy výnimiek v Jave

Popis:

Vo vyššie uvedenom kóde sme vytvorili dve triedy, t.j. UserDefinedException a Nová výnimka . The UserDefinedException má našu hlavnú metódu a Nová výnimka class je naša užívateľsky definovaná trieda výnimky, ktorá sa rozširuje výnimkou . V Nová výnimka triedy, vytvoríme premennú X typu integer a priraďte mu hodnotu v konštruktore. Po priradení hodnoty tejto premennej vrátime správu o výnimke.

V UserDefinedException triedy sme pridali a Skús chytiť blokovať. V sekcii try vyvoláme výnimku, t.j. Nová výnimka a odovzdať mu celé číslo. Hodnota bude odovzdaná triede NewException a vráti správu. Zachytíme túto správu v bloku catch a zobrazíme ju na obrazovke.

Rozdiel medzi začiarknutou a nezačiarknutou výnimkou

Áno nie Začiarknutá výnimka Nezačiarknutá výnimka
1. Tieto výnimky sa kontrolujú v čase kompilácie. Tieto výnimky sa riešia aj v čase kompilácie. Tieto výnimky sú presne opačné ako začiarknuté výnimky. Tieto výnimky nie sú kontrolované a spracované v čase kompilácie.
2. Tieto výnimky sú priamymi podtriedami výnimky, ale nie sú rozšírené z triedy RuntimeException. Sú to priame podtriedy triedy RuntimeException.
3. Kód dáva chybu kompilácie v prípade, keď metóda vyvolá skontrolovanú výnimku. Kompilátor nie je schopný spracovať výnimku sám. Kód sa skompiluje bez akejkoľvek chyby, pretože výnimky unikli upozorneniu kompilátora. Tieto výnimky sú výsledkom chýb v programovacej logike vytvorených používateľom.
4. Tieto výnimky sa väčšinou vyskytujú, keď je pravdepodobnosť zlyhania príliš vysoká. Tieto výnimky sa vyskytujú väčšinou v dôsledku programátorských chýb.
5. Bežné kontrolované výnimky zahŕňajú IOException, DataAccessException, InterruptedException atď. Bežné nekontrolované výnimky zahŕňajú ArithmeticException, InvalidClassException, NullPointerException atď.
6. Tieto výnimky sa šíria pomocou kľúčového slova throws. Tieto sa automaticky šíria.
7. Na spracovanie kontrolovanej výnimky je potrebné poskytnúť blok try-catch a try-finally. V prípade nezaškrtnutej výnimky to nie je povinné.

Chyby alebo chyby, ktoré nechceme a obmedzujú normálne vykonávanie programov, sa označujú ako výnimky .

ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions atď. patria do kategórie Vstavaná výnimka . Niekedy vstavané výnimky nestačia na vysvetlenie alebo popis určitých situácií. Na popis týchto situácií musíme vytvoriť vlastné výnimky vytvorením triedy výnimiek ako podtriedy triedy Výnimka trieda. Tieto typy výnimiek patria do kategórie Výnimka definovaná používateľom .