V tej vadnici bomo s pomočjo primerov spoznali izjavo try catch v Javi.
try… catch
Blok v Java se uporablja za ravnanje z izjemami in preprečuje nenormalno prenehanje programa.
Tu je sintaksa try… catch
bloka v Javi.
try( // code ) catch(exception) ( // code )
try
Blok vsebuje kodo, ki lahko ustvarjajo izjemo.
catch
Blok vsebuje kodo, ki se izvede, ko se pojavi izjemo znotraj try
bloka.
Primer: Java poskusite … ujeti blok
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()); ) ) )
Izhod
ArithmeticException => / za nič
V zgornjem primeru upoštevajte vrstico,
int divideByZero = 5 / 0;
Tu poskušamo število deliti z nič . V tem primeru pride do izjeme. Zato smo to kodo zaprli znotraj try
bloka.
Ko program naleti na to kodo, se ArithmeticException
zgodi. catch
Blok ujame izjemo in izvrši kodo znotraj catch
bloka.
catch
Blok se izvede samo, če obstaja izjema znotraj try
bloka.
Opomba : V Javi lahko uporabimo try
blok brez catch
bloka. Vendar catch
bloka ne moremo uporabiti brez try
bloka.
Poskus Java … končno blokiraj
try
Blok lahko uporabimo tudi skupaj z zaključnim blokom.
V tem primeru se zaključni blok vedno izvede, ne glede na to, ali obstaja v bloku poskus izjema.
Primer: Java poskusi … končno blokiraj
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Izhod
Končno se blok vedno izvede Izjema v niti "main" java.lang.ArithmeticException: / z ničlo pri Main.main (Main.java:4)
V zgornjem primeru smo uporabili try
blok skupaj z finally
blokom. Vidimo, da koda znotraj try
bloka povzroča izjemo.
Vendar se koda znotraj finally
bloka izvede ne glede na izjemo.
Java poskusite … ulovite … končno blokirajte
V Javi lahko uporabimo tudi zaključni blok za try… catch
blokom. Na primer
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(); ) )
Izhod
Vnos izjave za poskus Izjema => Indeks 5 izven meja za dolžino 5 Zapiranje PrintWriter
V zgornjem primeru smo ustvarili polje z imenom seznam in datoteko z imenom output.txt. Tu poskušamo prebrati podatke iz polja in jih shraniti v datoteko.
Upoštevajte kodo,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Tu je velikost polja 5
in zadnji element polja je na list(4)
. Vendar poskušamo dostopati do elementov na a(5)
in a(6)
.
Zato koda generira izjemo, ki jo ujame blok catch.
Ker se finally
blok vedno izvaja, smo vključili kodo, s katero zapremo PrintWriter
notranjost končnega bloka.
Dobra praksa je, da uporabite »block«, da vključite pomembno čistilno kodo, kot je zapiranje datoteke ali povezave.
Opomba : V nekaterih primerih se finally
blok ne izvede:
- Uporaba
System.exit()
metode - V
finally
bloku se pojavi izjema - Smrt niti
Več blokov ulova
Za vsak try
blok je lahko nič ali več catch
blokov. Več catch
blokov nam omogoča, da vsako izjemo obravnavamo drugače.
Tip argumenta vsakega catch
bloka označuje vrsto izjeme, ki jo lahko obravnava. Na primer
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(); ) )
Izhod
IndexOutOfBoundsException => Indeks 10 izven meja za dolžino 10
V tem primeru smo ustvarili celoštevilsko matriko, imenovano arr
velikost 10 .
Ker se indeks matrike začne z 0 , je zadnji element polja na arr(9)
. Upoštevajte izjavo,
arr(10) = 11;
Tukaj, se trudimo, da dodelite vrednost indeksa 10 . Zato se IndexOutOfBoundException
zgodi.
Ko se v try
bloku pojavi izjema ,
- 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
Poskus-z-virov izjava je izjava poskus, ki ima eno ali več izjav virov.
Njegova sintaksa je:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Vir je objekt, ki ga je treba zapreti na koncu programa. Deklarirati in inicializirati ga je treba v stavku try.
Vzemimo primer.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Izjava » poskusi z viri« se imenuje tudi samodejno upravljanje virov . Ta izjava samodejno zapre vse vire na koncu izjave.
Če želite izvedeti več, obiščite izjavo java try-with-resources.