I denne opplæringen vil vi lære om prøvefangstuttalelsen i Java ved hjelp av eksempler.
Den try… catch
blokk i Java brukes til å håndtere unntak og hindrer unormal avslutning av programmet.
Her er syntaksen til en try… catch
blokk i Java.
try( // code ) catch(exception) ( // code )
Den try
Blokken innbefatter den kode som kan generere et unntak.
Den catch
Blokken innbefatter den kode som er utført når det oppstår et unntak inne i try
blokken.
Eksempel: Java prøve … fangstblokk
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()); ) ) )
Produksjon
ArithmeticException => / med null
Legg merke til linjen i eksemplet ovenfor,
int divideByZero = 5 / 0;
Her prøver vi å dele et tall med null . I dette tilfellet forekommer et unntak. Derfor har vi lagt ved denne koden inne i try
blokken.
Når programmet møter denne koden, ArithmeticException
oppstår. Og unntaket blir fanget av catch
blokken og utfører koden inne i catch
blokken.
Den catch
blokken utføres kun dersom det finnes et unntak inne i try
blokken.
Merk : I Java kan vi bruke en try
blokk uten en catch
blokk. Vi kan imidlertid ikke bruke en catch
blokk uten en try
blokk.
Java prøve … til slutt blokkere
Vi kan også bruke try
blokken sammen med en endelig blokk.
I dette tilfellet blir den endelige blokken alltid utført enten det er et unntak i prøveblokken eller ikke.
Eksempel: Java prøve … til slutt blokkere
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Produksjon
Endelig utføres blokkeringen alltid Unntak i tråden "main" java.lang.ArithmeticException: / av null ved Main.main (Main.java:4)
I eksemplet ovenfor har vi brukt try
blokken sammen med finally
blokken. Vi kan se at koden inne i try
blokken forårsaker et unntak.
Imidlertid blir koden inne i finally
blokken utført uavhengig av unntaket.
Java prøve … fang … endelig blokk
I Java kan vi også bruke den endelige blokken etter 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(); ) )
Produksjon
Angir prøveerklæring Unntak => Indeks 5 utenfor grensene for lengde 5 Lukker PrintWriter
I eksemplet ovenfor har vi opprettet en liste med navn og en fil som heter output.txt. Her prøver vi å lese data fra matrisen og lagre til filen.
Legg merke til koden,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Her er størrelsen på matrisen 5
og det siste elementet i matrisen er på list(4)
. Imidlertid prøver vi å få tilgang til elementer på a(5)
og a(6)
.
Derfor genererer koden et unntak som fanges av fangstblokken.
Siden finally
blokken alltid utføres, har vi tatt med kode for å lukke PrintWriter
innsiden av den endelige blokken.
Det er en god praksis å bruke endelig blokk for å inkludere viktig oppryddingskode som å lukke en fil eller tilkobling.
Merk : Det er noen tilfeller når en finally
blokk ikke utføres:
- Bruk av
System.exit()
metode - Et unntak forekommer i
finally
blokken - En tråds død
Flere fangstblokker
For hver try
blokk kan det være null eller flere catch
blokker. Flere catch
blokker lar oss håndtere hvert unntak på en annen måte.
Argumenttypen for hver catch
blokk angir hvilken type unntak som kan håndteres av 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(); ) )
Produksjon
IndexOutOfBoundsException => Indeks 10 utenfor grensene for lengde 10
I dette eksemplet har vi opprettet et heltall array arr
med størrelse 10 .
Siden matriseindeksen starter fra 0 , er det siste elementet i matrisen på arr(9)
. Legg merke til uttalelsen,
arr(10) = 11;
Her prøver vi å tilordne en verdi til indeksen 10 . Derfor IndexOutOfBoundException
forekommer.
Når det oppstår et unntak 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 try-med-ressurser uttalelsen er et forsøk utsagn som har en eller flere ressurs erklæringer.
Dens syntaks er:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Ressursen er et objekt som skal lukkes på slutten av programmet. Det må erklæres og initialiseres i prøveerklæringen.
La oss ta et eksempel.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Den try-med-ressurser uttalelsen er også referert til som automatisk ressursforvaltning . Denne erklæringen lukker automatisk alle ressursene på slutten av uttalelsen.
Hvis du vil lære mer, kan du gå til Java-prøve-med-ressurser-uttalelsen.