Java try ... catch (z primeri)

V tej vadnici bomo s pomočjo primerov spoznali izjavo try catch v Javi.

try… catchBlok v Java se uporablja za ravnanje z izjemami in preprečuje nenormalno prenehanje programa.

Tu je sintaksa try… catchbloka v Javi.

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

tryBlok vsebuje kodo, ki lahko ustvarjajo izjemo.

catchBlok vsebuje kodo, ki se izvede, ko se pojavi izjemo znotraj trybloka.

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

Ko program naleti na to kodo, se ArithmeticExceptionzgodi. catchBlok ujame izjemo in izvrši kodo znotraj catchbloka.

catchBlok se izvede samo, če obstaja izjema znotraj trybloka.

Opomba : V Javi lahko uporabimo tryblok brez catchbloka. Vendar catchbloka ne moremo uporabiti brez trybloka.

Poskus Java … končno blokiraj

tryBlok 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 tryblok skupaj z finallyblokom. Vidimo, da koda znotraj trybloka povzroča izjemo.

Vendar se koda znotraj finallybloka izvede ne glede na izjemo.

Java poskusite … ulovite … končno blokirajte

V Javi lahko uporabimo tudi zaključni blok za try… catchblokom. 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 5in 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 finallyblok vedno izvaja, smo vključili kodo, s katero zapremo PrintWriternotranjost 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 finallyblok ne izvede:

  • Uporaba System.exit()metode
  • V finallybloku se pojavi izjema
  • Smrt niti

Več blokov ulova

Za vsak tryblok je lahko nič ali več catchblokov. Več catchblokov nam omogoča, da vsako izjemo obravnavamo drugače.

Tip argumenta vsakega catchbloka 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 arrvelikost 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 IndexOutOfBoundExceptionzgodi.

Ko se v trybloku pojavi izjema ,

  • 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

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.

Zanimive Članki...