Java prøve ... fangst (med eksempler)

I denne vejledning lærer vi om prøvefangstopgørelsen i Java ved hjælp af eksempler.

Den try… catchblok i Java bruges til at håndtere undtagelser og forhindrer unormal afslutning af programmet.

Her er syntaksen for en try… catchblok i Java.

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

Den tryblokken omfatter den kode, der kan generere en undtagelse.

Den catchblokken omfatter den kode, der eksekveres, når der opstår en undtagelse inde i tryblokken.

Eksempel: Java-prøve … fangstblok

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

Produktion

 ArithmeticException => / ved nul

I ovenstående eksempel bemærk linjen,

 int divideByZero = 5 / 0;

Her prøver vi at dele et tal med nul . I dette tilfælde forekommer en undtagelse. Derfor har vi vedlagt denne kode inde i tryblokken.

Når programmet møder denne kode, ArithmeticExceptionopstår. Og undtagelsen fanges af catchblokken og udfører koden inde i catchblokken.

Den catchblok udføres kun, hvis der findes en undtagelse inde i tryblokken.

Bemærk : I Java kan vi bruge en tryblok uden en catchblok. Vi kan dog ikke bruge en catchblok uden en tryblok.

Java-prøve … til sidst blokere

Vi kan også bruge tryblokken sammen med en endelig blok.

I dette tilfælde udføres den endelige blok altid om der er en undtagelse inde i prøveblokken eller ej.

Eksempel: Java-prøve … til sidst blokere

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

Produktion

 Endelig udføres blok altid undtagelse i tråden "main" java.lang.ArithmeticException: / ved nul ved Main.main (Main.java:4)

I eksemplet ovenfor har vi brugt tryblokken sammen med finallyblokken. Vi kan se, at koden inde i tryblokken forårsager en undtagelse.

Koden inde i finallyblokken udføres dog uanset undtagelsen.

Java prøv … fang … endelig blok

I Java kan vi også bruge den endelige blok efter try… catchblokken. For eksempel,

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

Produktion

 Indtastning af prøveerklæring Undtagelse => Indeks 5 uden for grænser for længde 5 Lukning af PrintWriter

I ovenstående eksempel har vi oprettet en matrix navngivet liste og en fil med navnet output.txt. Her forsøger vi at læse data fra arrayet og lagre til filen.

Bemærk koden,

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

Her er arrayets størrelse, 5og det sidste element i arrayet er på list(4). Vi forsøger dog at få adgang til elementer på a(5) og a(6).

Derfor genererer koden en undtagelse, der fanges af fangstblokken.

Da finallyblokken altid udføres, har vi inkluderet kode for at lukke PrintWriterindersiden af ​​den endelige blok.

Det er en god praksis at bruge endelig blok til at inkludere vigtig oprydningskode som at lukke en fil eller forbindelse.

Bemærk : Der er nogle tilfælde, hvor en finallyblok ikke udføres:

  • Brug af System.exit()metode
  • En undtagelse forekommer i finallyblokken
  • En tråds død

Flere fangstblokke

For hver tryblok kan der være nul eller flere catchblokke. Flere catchblokke giver os mulighed for at håndtere hver undtagelse forskelligt.

Argumenttypen for hver catchblok angiver den type undtagelse, der kan håndteres af den. For eksempel,

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

Produktion

 IndexOutOfBoundsException => Indeks 10 uden for grænserne for længde 10

I dette eksempel har vi oprettet et heltalsarray med navnet arrstørrelse 10 .

Da matrixindekset starter fra 0 , er det sidste element i arrayet ved arr(9). Bemærk erklæringen,

 arr(10) = 11;

Her forsøger vi at tildele en værdi til indekset 10 . Derfor IndexOutOfBoundExceptionforekommer.

Når der forekommer en undtagelse i tryblokken,

  • 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

Den ressourcer try-med- erklæring er en prøve erklæring om, at har en eller flere ressource erklæringer.

Dens syntaks er:

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

Ressourcen er et objekt, der skal lukkes i slutningen af ​​programmet. Det skal erklæres og initialiseres i prøveerklæringen.

Lad os tage et eksempel.

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

Den ressourcer try-med- erklæring også kaldet automatisk ressourcestyring . Denne erklæring lukker automatisk alle ressourcerne i slutningen af ​​erklæringen.

Hvis du vil vide mere, skal du besøge java-prøve-med-ressourcer erklæringen.

Interessante artikler...