V Javě, výjimka je nechtěná nebo neočekávaná událost, ke které dochází během provádění programu, tedy za běhu, která narušuje normální tok instrukcí programu.
V Javě existují dva typy výjimek:
- Kontrolované výjimky
- Nezaškrtnuté výjimky
Zaškrtnuté výjimky v Javě
Tyto jsou výjimky, které se kontrolují při kompilaci. Pokud nějaký kód v rámci metody vyvolá zaškrtnutou výjimku, pak metoda musí výjimku buď zpracovat, nebo ji musí specifikovat pomocí hází klíčové slovo . U kontrolovaných výjimek existují dva typy: plně kontrolované a částečně kontrolované výjimky. Plně kontrolovaná výjimka je kontrolovaná výjimka, kde jsou také kontrolovány všechny její podřízené třídy, jako je IOException a InterruptedException. Částečně zaškrtnutá výjimka je zaškrtnutá výjimka, kde některé její podřízené třídy nejsou zaškrtnuté, například výjimka.
Zvažte například následující program Java, který otevře soubor v umístění C: esta.txt a vytiskne jeho první tři řádky. Program se nezkompiluje, protože funkce main() používá FileReader() a FileReader() vyvolá zaškrtnutou výjimku FileNotFoundException . Používá také metody readLine() a close() a tyto metody také vyvolávají zaškrtnutou výjimku IOException
Příklad:
Jáva
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException occurred> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Reading file from path in local directory> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Creating object as one of ways of taking input> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing file connections> > // using close() method> > fileInput.close();> > }> }> |
>
>
Výstup:
Chcete-li opravit výše uvedený program, musíme buď zadat seznam výjimek pomocí throws, nebo musíme použít blok try-catch. V níže uvedeném programu jsme použili hody. Od té doby FileNotFoundException je podtřídou IOException , můžeme jen upřesnit IOException v seznamu hodů a udělejte výše uvedený program bez chyb kompilátoru.
Příklad:
Jáva
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException does not occur> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > throws> IOException> > {> > // Creating a file and reading from local repository> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Reading content inside a file> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing all file connections> > // using close() method> > // Good practice to avoid any memory leakage> > fileInput.close();> > }> }> |
>
>
Výstup:
First three lines of file 'C: esta.txt'>
Nezaškrtnuté výjimky v Javě
Toto jsou výjimky, které nejsou kontrolovány v době kompilace. V C++ nejsou všechny výjimky zaškrtnuté, takže kompilátor není nucen výjimku zpracovávat ani specifikovat. Je na programátorech, aby byli civilizovaní a specifikovali nebo chytili výjimky. V Javě platí výjimky pod Chyba a RuntimeException třídy jsou nezaškrtnuté výjimky, vše ostatní pod throwable je zaškrtnuto.
Zvažte následující program Java. Kompiluje se dobře, ale hází Aritmetická výjimka při běhu. Kompilátor umožňuje kompilaci, protože Aritmetická výjimka je nekontrolovaná výjimka.
Příklad:
Jáva
// Java Program to Illustrate Un-checked Exceptions> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Here we are dividing by 0> > // which will not be caught at compile time> > // as there is no mistake but caught at runtime> > // because it is mathematically incorrect> > int> x => 0> ;> > int> y => 10> ;> > int> z = y / x;> > }> }> |
latexový stůl
>
>
Výstup
Exception in thread 'main' java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) Java Result: 1>
Stručně řečeno, nekontrolované výjimky jsou výjimky za běhu, které nemusí být zachyceny nebo deklarovány v klauzuli throws. Tyto výjimky jsou obvykle způsobeny chybami programování, jako je pokus o přístup k indexu mimo hranice v poli nebo pokus o dělení nulou.
Nezaškrtnuté výjimky zahrnují všechny podtřídy třídy RuntimeException a také třídu Error a její podtřídy.
Zde je několik příkladů nekontrolovaných výjimek v Javě:
1. Výjimka ArrayIndexOutOfBounds: Tato výjimka je vyvolána při pokusu o přístup k indexu pole, který je mimo rozsah.
2. Výjimka NullPointer: Tato výjimka je vyvolána při pokusu o přístup k odkazu na nulový objekt.
3. Aritmetická výjimka: Tato výjimka je vyvolána, když se pokusíte dělit nulou nebo provedete neplatnou aritmetickou operaci.