I den här handledningen lär vi oss om försök fångstuttalande i Java med hjälp av exempel.
Det try… catch
block i Java används för att hantera undantag och förhindrar onormal avslutning av programmet.
Här är syntaxen för ett try… catch
block i Java.
try( // code ) catch(exception) ( // code )
I try
blocket innehåller kod som kan generera ett undantag.
Den catch
Blocket innefattar koden som exekveras när det inträffar ett undantag inuti try
blocket.
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 try
blocket.
När programmet stöter på den här koden ArithmeticException
inträffar. Och undantaget fångas av catch
blocket och kör koden inuti catch
blocket.
Den catch
blocket utförs endast om det finns ett undantag inuti try
blocket.
Obs! I Java kan vi använda ett try
block utan ett catch
block. Vi kan dock inte använda ett catch
block utan ett try
block.
Java-försök … slutligen blockera
Vi kan också använda try
blocket 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 try
blocket tillsammans med finally
blocket. Vi kan se att koden inuti try
blocket orsakar ett undantag.
Koden inuti finally
blocket 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… catch
blocket. 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 5
och 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 finally
blocket alltid körs har vi inkluderat kod för att stänga PrintWriter
insidan 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 finally
block inte körs:
- Användning av
System.exit()
metoden - Ett undantag förekommer i
finally
blocket - En tråds död
Flera fångstblock
För varje try
block kan det finnas noll eller fler catch
block. Flera catch
block gör att vi kan hantera varje undantag på olika sätt.
Argumenttypen för varje catch
block 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 arr
storlek 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 IndexOutOfBoundException
inträffar.
När ett undantag förekommer i try
blocket,
- 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-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.