U ovom uputstvu naučit ćemo o naredbi try catch u Javi uz pomoć primjera.
try… catch
Blok u Javi se koristi za rukovanje iznimkama i sprečava nenormalan završetak programa.
Evo sintakse try… catch
bloka u Javi.
try( // code ) catch(exception) ( // code )
try
Blok sadrži kod koji bi mogli generirati iznimku.
catch
Blok sadrži kod koji se izvršava kada se dogodi iznimka unutar try
bloka.
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 try
blok.
Kada se program susretne s ovim kodom, ArithmeticException
događa se. I, iznimku zahvaća catch
blok i izvršava kôd unutar catch
bloka.
catch
Blok se izvršava samo ako postoji izuzetak unutar try
bloka.
Napomena : U Javi možemo koristiti try
blok bez catch
bloka. Međutim, ne možemo koristiti catch
blok bez try
bloka.
Pokušaj Java … konačno blokiraj
Također možemo koristiti try
blok 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 try
blok zajedno s finally
blokom. Vidimo da kod unutar try
bloka uzrokuje iznimku.
Međutim, kôd unutar finally
bloka 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… catch
bloka. 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 5
i 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 finally
blok uvijek izvršava, uključili smo kod da zatvorimo PrintWriter
unutraš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 finally
blok ne izvrši:
- Upotreba
System.exit()
metode - Iznimka se javlja u
finally
bloku - Smrt niti
Više blokova ulova
Za svaki try
blok može postojati nula ili više catch
blokova. Višestruki catch
blokovi omogućuju nam različito postupanje sa svakom iznimkom.
Tip argumenta svakog catch
bloka 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 arr
velič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, IndexOutOfBoundException
događa se.
Kada se u try
bloku dogodi iznimka ,
- 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
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.