V tomto tutoriálu se pomocí příkladů dozvíme o příkazu try catch v Javě.
try… catch
Blok v jazyce Java se používá pro zpracování výjimek a zabraňuje abnormální ukončení programu.
Zde je syntaxe try… catch
bloku v Javě.
try( // code ) catch(exception) ( // code )
try
Blok obsahuje kód, který může generovat výjimku.
catch
Blok obsahuje kód, který je proveden v případě, že dojde k výjimce uvnitř try
bloku.
Pří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ýstup
ArithmeticException => / o nulu
Ve výše uvedeném příkladu si všimněte řádku,
int divideByZero = 5 / 0;
Zde se pokoušíme vydělit číslo nulou . V tomto případě dojde k výjimce. Proto jsme tento kód uzavřeli uvnitř try
bloku.
Když program narazí na tento kód, ArithmeticException
nastane. A výjimka je chycena catch
blokem a provede kód uvnitř catch
bloku.
catch
Blok je proveden pouze tehdy, pokud existuje výjimka uvnitř try
bloku.
Poznámka : V Javě můžeme použít try
blok bez catch
bloku. Nemůžeme však použít catch
blok bez try
bloku.
Java zkuste … konečně zablokovat
Můžeme také použít try
blok spolu s konečným blokem.
V tomto případě se blok nakonec provede vždy, ať už je v bloku try výjimka nebo ne.
Příklad: Java vyzkoušet … konečně zablokovat
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Výstup
Nakonec je blok vždy spuštěn Výjimka ve vlákně "main" java.lang.ArithmeticException: / nulou na Main.main (Main.java:4)
Ve výše uvedeném příkladu jsme použili try
blok spolu s finally
blokem. Vidíme, že kód uvnitř try
bloku způsobuje výjimku.
Kód uvnitř finally
bloku se však provádí bez ohledu na výjimku.
Java zkuste … chytit … konečně zablokovat
V Javě můžeme také použít blok finally po try… catch
bloku. Napří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ýstup
Zadání příkazu try Výjimka => Index 5 mimo hranice pro délku 5 Uzavření PrintWriter
Ve výše uvedeném příkladu jsme vytvořili pole s názvem list a soubor s názvem output.txt. Zde se snažíme číst data z pole a ukládat je do souboru.
Všimněte si kódu,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Zde je velikost pole 5
a poslední prvek pole je na list(4)
. Snažíme se však přistupovat k prvkům na a(5)
a a(6)
.
Proto kód generuje výjimku, která je zachycena blokem catch.
Vzhledem k tomu, že finally
blok je vždy spuštěn, zahrnuli jsme kód, který uzavře PrintWriter
vnitřek bloku finally.
Je dobrým zvykem použít konečně blok k zahrnutí důležitého čisticího kódu, jako je zavření souboru nebo připojení.
Poznámka : Existují případy, kdy finally
blok neprovede:
- Použití
System.exit()
metody - V
finally
bloku dojde k výjimce - Smrt vlákna
Více bloků úlovku
Pro každý try
blok může být nula nebo více catch
bloků. Více catch
bloků nám umožňuje zpracovat každou výjimku jinak.
Typ argumentu každého catch
bloku označuje typ výjimky, kterou lze zpracovat. Napří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ýstup
IndexOutOfBoundsException => Index 10 mimo hranice pro délku 10
V tomto příkladu jsme vytvořili celé číslo s názvem arr
velikosti 10 .
Vzhledem k tomu, že index pole začíná od 0 , je poslední prvek pole na arr(9)
. Všimněte si prohlášení,
arr(10) = 11;
Zde se snažíme přiřadit hodnotu indexu 10 . Proto IndexOutOfBoundException
dochází.
Když v try
bloku dojde k výjimce ,
- 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
Příkaz try-with-resources je příkaz try, který má jednu nebo více deklarací prostředků.
Jeho syntaxe je:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Zdroj je objekt, který má být uzavřen na konci programu. Musí být deklarován a inicializován v příkazu try.
Vezměme si příklad.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Příkaz try-with-resources se také označuje jako automatická správa prostředků . Tento příkaz na konci výpisu automaticky zavře všechny prostředky.
Chcete-li se dozvědět více, navštivte prohlášení Java try-with-resources.