Java try ... catch (S příklady)

V tomto tutoriálu se pomocí příkladů dozvíme o příkazu try catch v Javě.

try… catchBlok v jazyce Java se používá pro zpracování výjimek a zabraňuje abnormální ukončení programu.

Zde je syntaxe try… catchbloku v Javě.

 try( // code ) catch(exception) ( // code )

tryBlok obsahuje kód, který může generovat výjimku.

catchBlok obsahuje kód, který je proveden v případě, že dojde k výjimce uvnitř trybloku.

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ř trybloku.

Když program narazí na tento kód, ArithmeticExceptionnastane. A výjimka je chycena catchblokem a provede kód uvnitř catchbloku.

catchBlok je proveden pouze tehdy, pokud existuje výjimka uvnitř trybloku.

Poznámka : V Javě můžeme použít tryblok bez catchbloku. Nemůžeme však použít catchblok bez trybloku.

Java zkuste … konečně zablokovat

Můžeme také použít tryblok 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 tryblok spolu s finallyblokem. Vidíme, že kód uvnitř trybloku způsobuje výjimku.

Kód uvnitř finallybloku 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… catchbloku. 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 5a 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 finallyblok je vždy spuštěn, zahrnuli jsme kód, který uzavře PrintWritervnitř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 finallyblok neprovede:

  • Použití System.exit()metody
  • V finallybloku dojde k výjimce
  • Smrt vlákna

Více bloků úlovku

Pro každý tryblok může být nula nebo více catchbloků. Více catchbloků nám umožňuje zpracovat každou výjimku jinak.

Typ argumentu každého catchbloku 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 arrvelikosti 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 IndexOutOfBoundExceptiondochází.

Když v trybloku dojde k výjimce ,

  • The exception is thrown to the first catch block. The first catch block does not handle an IndexOutOfBoundsException, so it is passed to the next catch block.
  • The second catch block in the above example is the appropriate exception handler because it handles an IndexOutOfBoundsException. 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.

Zajímavé články...