V tomto tutoriálu se pomocí příkladů seznámíme s různými přístupy ke zpracování výjimek v Javě.
V posledním kurzu jsme se dozvěděli o výjimkách Java. Víme, že výjimky abnormálně ukončují provádění programu.
Proto je důležité vyřizovat výjimky. Zde je seznam různých přístupů ke zpracování výjimek v Javě.
- zkuste … chytit blok
- konečně zablokovat
- házet a házet klíčové slovo
1. Java vyzkoušet … chytit blok
Blok try-catch se používá ke zpracování výjimek v Javě. Zde je syntaxe try… catch
bloku:
try ( // code ) catch(Exception e) ( // code )
Tady jsme umístili kód, který by mohl generovat výjimku uvnitř try
bloku. Po každém try
bloku následuje catch
blok.
Když dojde k výjimce, je chycena catch
blokem. catch
Blok nelze použít bez try
bloku.
Příklad: Zpracování výjimek pomocí try… catch
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Výstup
ArithmeticException => / o nulu
V příkladu se snažíme číslo vydělit 0
. Zde tento kód generuje výjimku.
Abychom zvládli výjimku, vložili jsme kód 5 / 0
do try
bloku. Když nyní dojde k výjimce, zbytek kódu uvnitř try
bloku se přeskočí.
catch
Blok chytí se provádí výjimka a příkazy uvnitř bloku catch.
Pokud žádný z příkazů v try
bloku nevygeneruje výjimku, catch
blok se přeskočí.
2. Java konečně blokuje
V Javě se finally
blok vždy provede bez ohledu na to, zda existuje výjimka nebo ne.
finally
Blok je volitelné. A pro každý try
blok může existovat pouze jeden finally
blok.
Základní syntaxe finally
bloku je:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Pokud dojde k výjimce, finally
blok se provede po try… catch
bloku. Jinak se provede po bloku try. Pro každý try
blok může být pouze jeden finally
blok.
Příklad: Zpracování výjimek Java pomocí bloku finally
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Výstup
ArithmeticException => / by zero Toto je konečný blok
Ve výše uvedeném příkladu vydělíme číslo 0 uvnitř try
bloku. Zde tento kód generuje ArithmeticException
.
Výjimku zachycuje catch
blok. A pak je finally
blok proveden.
Poznámka : Je dobrým zvykem používat finally
blok. Je to proto, že může obsahovat důležité kódy čištění, jako například
- kód, který může být omylem přeskočen návratem, pokračováním nebo zlomením
- uzavření souboru nebo připojení
3. Klíčové slovo Java throw and throws
throw
Klíčové slovo Java se používá k výslovnému vyvolání jedné výjimky.
Když uděláme throw
výjimku, tok programu se přesune z try
bloku do catch
bloku.
Příklad: Zpracování výjimek pomocí vyvolání Java
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Výstup
Výjimka ve vlákně "main" java.lang.ArithmeticException: Pokus o dělení 0 na Main.divideByZero (Main.java:5) na Main.main (Main.java:9)
Ve výše uvedeném příkladu explicitně házíme ArithmeticException
pomocí throw
klíčového slova.
Podobně se throws
klíčové slovo používá k deklaraci typu výjimek, ke kterým může dojít v rámci metody. Používá se v deklaraci metody.
Příklad: Java hodí klíčové slovo
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Výstup
java.io.FileNotFoundException: test.txt (Systém nemůže najít zadaný soubor)
Když spustíme tento program, pokud soubor test.txt neexistuje, FileInputStream
hodí a FileNotFoundException
který rozšiřuje IOException
třídu.
findFile()
Metoda určuje, že IOException
může být vyvolána. main()
Metoda volá tuto metodu a zpracovává výjimku, pokud je vyvolána.
Pokud metoda nezpracovává výjimky, musí být v throws
klauzuli uveden typ výjimek, které se v ní mohou vyskytnout .
Chcete-li se dozvědět více, navštivte stránky Java throw and throws.