Java-försök ... fånga (med exempel)

I den här handledningen lär vi oss om försök fångstuttalande i Java med hjälp av exempel.

Det try… catchblock i Java används för att hantera undantag och förhindrar onormal avslutning av programmet.

Här är syntaxen för ett try… catchblock i Java.

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

I tryblocket innehåller kod som kan generera ett undantag.

Den catchBlocket innefattar koden som exekveras när det inträffar ett undantag inuti tryblocket.

Exempel: Java-försök … fångstblock

 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 => / med noll

Lägg märke till raden i exemplet ovan,

 int divideByZero = 5 / 0;

Här försöker vi dela ett tal med noll . I detta fall inträffar ett undantag. Därför har vi bifogat den här koden inuti tryblocket.

När programmet stöter på den här koden ArithmeticExceptioninträffar. Och undantaget fångas av catchblocket och kör koden inuti catchblocket.

Den catchblocket utförs endast om det finns ett undantag inuti tryblocket.

Obs! I Java kan vi använda ett tryblock utan ett catchblock. Vi kan dock inte använda ett catchblock utan ett tryblock.

Java-försök … slutligen blockera

Vi kan också använda tryblocket tillsammans med ett slutligt block.

I det här fallet utförs slutligen blocket alltid om det finns ett undantag inuti försöksblocket eller inte.

Exempel: Java-försök … slutligen blockera

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

Produktion

 Slutligen körs alltid block Undantag i tråden "main" java.lang.ArithmeticException: / med noll vid Main.main (Main.java:4)

I exemplet ovan har vi använt tryblocket tillsammans med finallyblocket. Vi kan se att koden inuti tryblocket orsakar ett undantag.

Koden inuti finallyblocket körs dock oberoende av undantaget.

Java försök … fånga … slutligen blockera

I Java kan vi också använda det slutliga blocket efter try… catchblocket. Till exempel,

 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

 Ange försöksuttalande Undantag => Index 5 utanför gränserna för längd 5 Avsluta PrintWriter

I exemplet ovan har vi skapat en matris med namnet lista och en fil med namnet output.txt. Här försöker vi läsa data från matrisen och lagra i filen.

Lägg märke till koden,

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

Här är storleken på matrisen 5och det sista elementet i matrisen är på list(4). Vi försöker dock komma åt element på a(5) och a(6).

Därför genererar koden ett undantag som fångas av fångsten.

Eftersom finallyblocket alltid körs har vi inkluderat kod för att stänga PrintWriterinsidan av slutligen blocket.

Det är bra att slutligen använda block för att inkludera viktig rensningskod som att stänga en fil eller anslutning.

Obs! Det finns vissa fall när ett finallyblock inte körs:

  • Användning av System.exit()metoden
  • Ett undantag förekommer i finallyblocket
  • En tråds död

Flera fångstblock

För varje tryblock kan det finnas noll eller fler catchblock. Flera catchblock gör att vi kan hantera varje undantag på olika sätt.

Argumenttypen för varje catchblock anger vilken typ av undantag som kan hanteras av det. Till exempel,

 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 => Index 10 utanför gränserna för längd 10

I det här exemplet har vi skapat en heltalmatris med namnet arrstorlek 10 .

Eftersom matrisindex börjar från 0 är det sista elementet i matrisen vid arr(9). Lägg märke till uttalandet,

 arr(10) = 11;

Här försöker vi tilldela index 10 ett värde . Därför IndexOutOfBoundExceptioninträffar.

När ett undantag förekommer i tryblocket,

  • 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-resurser uttalande är ett försök uttalande som har en eller flera resursdeklarationer.

Dess syntax är:

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

Resursen är ett objekt som ska stängas i slutet av programmet. Det måste deklareras och initialiseras i försöksuttalandet.

Låt oss ta ett exempel.

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

Den try-med-resurser uttalande också kallad automatisk resurshantering . Detta uttalande stänger automatiskt alla resurser i slutet av uttalandet.

Om du vill veta mer besöker du Java-försök med resurser.

Intressanta artiklar...