I denne vejledning lærer vi om prøvefangstopgørelsen i Java ved hjælp af eksempler.
Den try… catch
blok i Java bruges til at håndtere undtagelser og forhindrer unormal afslutning af programmet.
Her er syntaksen for en try… catch
blok i Java.
try( // code ) catch(exception) ( // code )
Den try
blokken omfatter den kode, der kan generere en undtagelse.
Den catch
blokken omfatter den kode, der eksekveres, når der opstår en undtagelse inde i try
blokken.
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 try
blokken.
Når programmet møder denne kode, ArithmeticException
opstår. Og undtagelsen fanges af catch
blokken og udfører koden inde i catch
blokken.
Den catch
blok udføres kun, hvis der findes en undtagelse inde i try
blokken.
Bemærk : I Java kan vi bruge en try
blok uden en catch
blok. Vi kan dog ikke bruge en catch
blok uden en try
blok.
Java-prøve … til sidst blokere
Vi kan også bruge try
blokken 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 try
blokken sammen med finally
blokken. Vi kan se, at koden inde i try
blokken forårsager en undtagelse.
Koden inde i finally
blokken udføres dog uanset undtagelsen.
Java prøv … fang … endelig blok
I Java kan vi også bruge den endelige blok efter try… catch
blokken. 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, 5
og 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 finally
blokken altid udføres, har vi inkluderet kode for at lukke PrintWriter
indersiden 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 finally
blok ikke udføres:
- Brug af
System.exit()
metode - En undtagelse forekommer i
finally
blokken - En tråds død
Flere fangstblokke
For hver try
blok kan der være nul eller flere catch
blokke. Flere catch
blokke giver os mulighed for at håndtere hver undtagelse forskelligt.
Argumenttypen for hver catch
blok 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 arr
stø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 IndexOutOfBoundException
forekommer.
Når der forekommer en undtagelse i try
blokken,
- 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
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.