Java try ... catch (S príkladmi)

V tomto tutoriále sa pomocou príkladov dozvieme o príkaze try catch v Jave.

try… catchBlok v jazyku Java sa používa pre spracovanie výnimiek a zabraňuje abnormálne ukončenie programu.

Tu je syntax try… catchbloku v Jave.

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

tryBlok obsahuje kód, ktorý môže generovať výnimku.

catchBlok obsahuje kód, ktorý je vykonaný v prípade, že dôjde k výnimke vnútri trybloku.

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

Keď program narazí na tento kód, ArithmeticExceptiondôjde. A výnimku zachytí catchblok a vykoná kód vo vnútri catchbloku.

catchBlok je vykonaný len vtedy, ak existuje výnimka vnútri trybloku.

Poznámka : V Jave môžeme použiť tryblok bez catchbloku. Nemôžeme však použiť catchblok bez trybloku.

Skúste Java … konečne zablokujte

Môžeme tiež použiť tryblok 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 tryblok spolu s finallyblokom. Vidíme, že kód vo vnútri trybloku spôsobuje výnimku.

Kód vo vnútri finallybloku 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… catchblokom. 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 5a 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 finallyblok je vždy vykonaný, zahrnuli sme kód na uzavretie PrintWritervnú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 finallyblok nevykoná:

  • Použitie System.exit()metódy
  • V finallybloku nastáva výnimka
  • Smrť vlákna

Viaceré úlovkové bloky

Pre každý tryblok môže byť nula alebo viac catchblokov. Viacero catchblokov nám umožňuje vybaviť každú výnimku inak.

Typ argumentu každého catchbloku 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 arrveľ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 IndexOutOfBoundExceptionnastáva.

Ak sa v trybloku vyskytne výnimka ,

  • 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

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.

Zaujímavé články...