Java try ... catch (s primjerima)

U ovom uputstvu naučit ćemo o naredbi try catch u Javi uz pomoć primjera.

try… catchBlok u Javi se koristi za rukovanje iznimkama i sprečava nenormalan završetak programa.

Evo sintakse try… catchbloka u Javi.

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

tryBlok sadrži kod koji bi mogli generirati iznimku.

catchBlok sadrži kod koji se izvršava kada se dogodi iznimka unutar trybloka.

Primjer: Java pokušaj … 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()); ) ) )

Izlaz

 ArithmeticException => / nula

U gornjem primjeru, primijetite redak,

 int divideByZero = 5 / 0;

Ovdje pokušavamo podijeliti broj s nulom . U ovom slučaju dolazi do iznimke. Stoga smo ovaj kod zatvorili u tryblok.

Kada se program susretne s ovim kodom, ArithmeticExceptiondogađa se. I, iznimku zahvaća catchblok i izvršava kôd unutar catchbloka.

catchBlok se izvršava samo ako postoji izuzetak unutar trybloka.

Napomena : U Javi možemo koristiti tryblok bez catchbloka. Međutim, ne možemo koristiti catchblok bez trybloka.

Pokušaj Java … konačno blokiraj

Također možemo koristiti tryblok zajedno s konačno blokom.

U ovom slučaju, napokon se blok uvijek izvršava bez obzira postoji li iznimka unutar pokušaj bloka ili ne.

Primjer: Java pokušaj … konačno blokiraj

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Izlaz

 Napokon se blok uvijek izvršava Izuzetak u niti "main" java.lang.ArithmeticException: / po nuli na Main.main (Main.java:4)

U gornjem primjeru koristili smo tryblok zajedno s finallyblokom. Vidimo da kod unutar trybloka uzrokuje iznimku.

Međutim, kôd unutar finallybloka izvršava se bez obzira na iznimku.

Java pokušaj … uhvati … konačno blokiraj

U Javi možemo koristiti i block konačno nakon try… catchbloka. Na primjer,

 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(); ) )

Izlaz

 Unošenje stavke try Iznimka => Indeks 5 izvan granica duljine 5 Zatvaranje PrintWriter

U gornjem primjeru stvorili smo niz s popisom i datoteku koja se zove output.txt. Ovdje pokušavamo pročitati podatke iz niza i pohraniti ih u datoteku.

Primijetite kod,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Ovdje je veličina polja 5i zadnji element elementa je list(4). Međutim, pokušavamo pristupiti elementima na a(5) i a(6).

Stoga kôd generira iznimku koju uhvati blok catch.

Budući da se finallyblok uvijek izvršava, uključili smo kod da zatvorimo PrintWriterunutrašnjost konačno bloka.

Dobra je praksa koristiti konačno block za uključivanje važnog koda za čišćenje, poput zatvaranja datoteke ili veze.

Napomena : Postoje neki slučajevi kada se finallyblok ne izvrši:

  • Upotreba System.exit()metode
  • Iznimka se javlja u finallybloku
  • Smrt niti

Više blokova ulova

Za svaki tryblok može postojati nula ili više catchblokova. Višestruki catchblokovi omogućuju nam različito postupanje sa svakom iznimkom.

Tip argumenta svakog catchbloka označava vrstu iznimke s kojom se može rukovati. Na primjer,

 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(); ) )

Izlaz

 IndexOutOfBoundsException => Indeks 10 izvan granica duljine 10

U ovom smo primjeru stvorili cjeloviti niz imenovan arrveličinom 10 .

Budući da indeks niza započinje od 0 , posljednji element niza je at arr(9). Primijetite izjavu,

 arr(10) = 11;

Ovdje pokušavamo indeksu 10 dodijeliti vrijednost . Dakle, IndexOutOfBoundExceptiondogađa se.

Kada se u trybloku dogodi iznimka ,

  • 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

Probati-s-resursa izjava je pokušaj izjava koja ima jedan ili više resursa izjave.

Njegova sintaksa je:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

Resurs je objekt koji se zatvara na kraju programa. Mora se deklarirati i inicijalizirati u naredbi try.

Uzmimo primjer.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

Probati-s-resursa izjava također naziva automatsko upravljanje resursima . Ova izjava automatski zatvara sve resurse na kraju izjave.

Da biste saznali više, posjetite Java izjavu try-with-resources.

Zanimljivi članci...