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

I denne opplæringen vil vi lære om prøvefangstuttalelsen i Java ved hjelp av eksempler.

Den try… catchblokk i Java brukes til å håndtere unntak og hindrer unormal avslutning av programmet.

Her er syntaksen til en try… catchblokk i Java.

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

Den tryBlokken innbefatter den kode som kan generere et unntak.

Den catchBlokken innbefatter den kode som er utført når det oppstår et unntak inne i tryblokken.

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

Når programmet møter denne koden, ArithmeticExceptionoppstår. Og unntaket blir fanget av catchblokken og utfører koden inne i catchblokken.

Den catchblokken utføres kun dersom det finnes et unntak inne i tryblokken.

Merk : I Java kan vi bruke en tryblokk uten en catchblokk. Vi kan imidlertid ikke bruke en catchblokk uten en tryblokk.

Java prøve … til slutt blokkere

Vi kan også bruke tryblokken 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 tryblokken sammen med finallyblokken. Vi kan se at koden inne i tryblokken forårsaker et unntak.

Imidlertid blir koden inne i finallyblokken utført uavhengig av unntaket.

Java prøve … fang … endelig blokk

I Java kan vi også bruke den endelige blokken etter 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(); ) )

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 5og 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 finallyblokken alltid utføres, har vi tatt med kode for å lukke PrintWriterinnsiden 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 finallyblokk ikke utføres:

  • Bruk av System.exit()metode
  • Et unntak forekommer i finallyblokken
  • En tråds død

Flere fangstblokker

For hver tryblokk kan det være null eller flere catchblokker. Flere catchblokker lar oss håndtere hvert unntak på en annen måte.

Argumenttypen for hver catchblokk 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 arrmed 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 IndexOutOfBoundExceptionforekommer.

Når det oppstår et unntak 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 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.

Interessante artikler...