V tomto tutoriále sa pomocou príkladov dozvieme o príkaze try catch v Jave.
try… catch
Blok v jazyku Java sa používa pre spracovanie výnimiek a zabraňuje abnormálne ukončenie programu.
Tu je syntax try… catch
bloku v Jave.
try( // code ) catch(exception) ( // code )
try
Blok obsahuje kód, ktorý môže generovať výnimku.
catch
Blok obsahuje kód, ktorý je vykonaný v prípade, že dôjde k výnimke vnútri try
bloku.
Príklad: Java try … catch block
class Main ( public static void main(String() args) ( try ( 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
Vo vyššie uvedenom príklade si všimnite riadok,
int divideByZero = 5 / 0;
Tu sa pokúšame rozdeliť číslo na nulu . V takom prípade nastáva výnimka. Preto sme tento kód uzavreli do try
bloku.
Keď program narazí na tento kód, ArithmeticException
dôjde. A výnimku zachytí catch
blok a vykoná kód vo vnútri catch
bloku.
catch
Blok je vykonaný len vtedy, ak existuje výnimka vnútri try
bloku.
Poznámka : V Jave môžeme použiť try
blok bez catch
bloku. Nemôžeme však použiť catch
blok bez try
bloku.
Skúste Java … konečne zablokujte
Môžeme tiež použiť try
blok spolu s konečne blokom.
V takom prípade sa blok konečne vykoná vždy, či je vo vnútri bloku try výnimka alebo nie.
Príklad: Java skúste … konečne zablokovať
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Výkon
Nakoniec sa blok vykoná vždy Výnimka vo vlákne „main“ java.lang.ArithmeticException: / nulou na Main.main (Main.java:4)
Vo vyššie uvedenom príklade sme použili try
blok spolu s finally
blokom. Vidíme, že kód vo vnútri try
bloku spôsobuje výnimku.
Kód vo vnútri finally
bloku sa však vykoná bez ohľadu na výnimku.
Java skúste … chytiť … konečne zablokovať
V Jave môžeme použiť aj blok konečne za try… catch
blokom. Napríklad,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Výkon
Zadanie príkazu try Výnimka => Index 5 mimo hranice pre dĺžku 5 Zatvára sa PrintWriter
Vo vyššie uvedenom príklade sme vytvorili pole s názvom list a súbor s názvom output.txt. Tu sa snažíme načítať údaje z poľa a ukladať ich do súboru.
Všimnite si kód,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Tu je veľkosť poľa 5
a posledný prvok poľa je na list(4)
. Snažíme sa však získať prístup k prvkom na a(5)
a a(6)
.
Preto kód generuje výnimku, ktorá je zachytená blokom catch.
Pretože finally
blok je vždy vykonaný, zahrnuli sme kód na uzavretie PrintWriter
vnútra bloku konečne.
Je dobrým zvykom použiť konečne blok na zahrnutie dôležitého čistiaceho kódu, ako je zatvorenie súboru alebo pripojenie.
Poznámka : Existujú prípady, keď sa finally
blok nevykoná:
- Použitie
System.exit()
metódy - V
finally
bloku nastáva výnimka - Smrť vlákna
Viaceré úlovkové bloky
Pre každý try
blok môže byť nula alebo viac catch
blokov. Viacero catch
blokov nám umožňuje vybaviť každú výnimku inak.
Typ argumentu každého catch
bloku označuje typ výnimky, ktorú je možné spracovať. Napríklad,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Výkon
IndexOutOfBoundsException => Indexujte 10 mimo hranice pre dĺžku 10
V tomto príklade sme vytvorili celé číslo s názvom arr
veľkosti 10 .
Pretože index poľa začína od 0 , posledný prvok poľa je na arr(9)
. Všimnite si vyhlásenie,
arr(10) = 11;
Tu sa snažíme indexu 10 priradiť hodnotu . Preto IndexOutOfBoundException
nastáva.
Ak sa v try
bloku vyskytne výnimka ,
- The exception is thrown to the first
catch
block. The firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. Hence, it is executed.
Catching Multiple Exceptions
From Java SE 7 and later, we can now catch more than one type of exception with one catch
block.
This reduces code duplication and increases code simplicity and efficiency.
Each exception type that can be handled by the catch
block is separated using a vertical bar |
.
Its syntax is:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
To learn more, visit Java catching multiple exceptions.
Java try-with-resources statement
Príkaz try-with-resources je príkaz try, ktorý má jednu alebo viac deklarácií prostriedkov.
Jeho syntax je:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Zdrojom je objekt, ktorý sa má uzavrieť na konci programu. Musí byť deklarovaný a inicializovaný vo vyhlásení try.
Zoberme si príklad.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Príkaz try-with-resources sa tiež označuje ako automatická správa prostriedkov . Tento príkaz na konci výpisu automaticky zatvorí všetky zdroje.
Ak sa chcete dozvedieť viac, navštívte vyhlásenie Java s názvom Try-with-Resources.