V tutoriáli sa pomocou príkladov dozvieme o rôznych prístupoch pri spracovávaní výnimiek v Jave.
V minulom návode sme sa dozvedeli o výnimkách Java. Vieme, že výnimky abnormálne ukončujú vykonávanie programu.
Preto je dôležité zaobchádzať s výnimkami. Tu je zoznam rôznych prístupov k spracovaniu výnimiek v Jave.
- skúste … chytiť blok
- konečne zablokovať
- kľúčové slovo vrhať a vrhá
1. Skúste Java … chytiť blok
Blok try-catch sa používa na spracovanie výnimiek v Jave. Tu je syntax try… catch
bloku:
try ( // code ) catch(Exception e) ( // code )
Tu sme umiestnili kód, ktorý by mohol vygenerovať výnimku, do try
bloku. Za každým try
blokom nasleduje catch
blok.
Keď dôjde k výnimke, zachytí ju catch
blok. catch
Blok nemožno použiť bez try
bloku.
Príklad: Spracovanie výnimiek pomocou 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ýkon
ArithmeticException => / o nulu
V príklade sa snažíme vydeliť číslo 0
. Tu tento kód generuje výnimku.
Aby sme zvládli výnimku, umiestnili sme kód 5 / 0
do try
bloku. Teraz, keď dôjde k výnimke, try
sa preskočí zvyšok kódu vo vnútri bloku.
catch
Blok chytí sa vykonáva výnimka a príkazy vnútri bloku catch.
Ak žiadny z príkazov v try
bloku nevygeneruje výnimku, catch
blok sa preskočí.
2. Java konečne blokuje
V Jave sa finally
blok vždy vykoná bez ohľadu na to, či existuje výnimka alebo nie.
finally
Blok je voliteľné. A pre každý try
blok môže byť iba jeden finally
blok.
Základná syntax finally
bloku je:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Ak dôjde k výnimke, finally
blok sa vykoná po try… catch
bloku. V opačnom prípade sa vykoná po bloku try. Pre každý try
blok môže byť iba jeden finally
blok.
Príklad: Spracovanie výnimiek Java pomocou bloku konečne
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ýkon
ArithmeticException => / o nulu Toto je konečne blok
Vo vyššie uvedenom príklade vydelíme číslo 0 vo vnútri try
bloku. Tu tento kód generuje ArithmeticException
.
Výnimku vystihuje catch
blok. A potom sa finally
blok vykoná.
Poznámka : Je dobrým zvykom používať finally
blok. Je to preto, lebo môže obsahovať dôležité kódy čistenia, ako napríklad
- kód, ktorý je možné omylom preskočiť vrátením, pokračovaním alebo zlomením
- ukončenie súboru alebo pripojenia
3. Kľúčové slovo Java throw and throws
throw
Kľúčové slovo Java sa používa na výslovné použitie jednej výnimky.
Keď sme throw
výnimkou, tok programu sa posúva z try
bloku do catch
bloku.
Príklad: Spracovanie výnimiek pomocou príkazu 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ýkon
Výnimka vo vlákne „main“ java.lang.ArithmeticException: Pokus o rozdelenie 0 na Main.divideByZero (Main.java:5) na Main.main (Main.java:9)
Vo vyššie uvedenom príklade výslovne vrháme ArithmeticException
použitie throw
kľúčového slova.
Podobne sa throws
kľúčové slovo používa na deklarovanie typu výnimiek, ktoré sa môžu v rámci metódy vyskytnúť. Používa sa v deklarácii metódy.
Príklad: Java hodí kľúč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ýkon
java.io.FileNotFoundException: test.txt (systém nemôže nájsť zadaný súbor)
Keď spustíme tento program, ak súbor test.txt neexistuje, FileInputStream
hodí znak, FileNotFoundException
ktorý rozširuje IOException
triedu.
findFile()
Metóda určuje, že IOException
môže byť vyvolaná. main()
Metóda volá túto metódu a spracováva výnimku, ak je vyvolaná.
Ak metóda nespracováva výnimky, musí byť v throws
doložke uvedený typ výnimiek, ktoré sa v nej môžu vyskytnúť .
Ak sa chcete dozvedieť viac, navštívte stránku Java throws a throws.