Java try ... catch (met voorbeelden)

In deze tutorial leren we aan de hand van voorbeelden de instructie try catch in Java kennen.

Het try… catchblok in Java wordt gebruikt om uitzonderingen af ​​te handelen en voorkomt de abnormale beëindiging van het programma.

Hier is de syntaxis van een try… catchblok in Java.

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

Het tryblok bevat de code die een uitzondering kan genereren.

Het catchblok bevat de code die wordt uitgevoerd wanneer er een uitzondering optreedt binnen het tryblok.

Voorbeeld: Java try… catch block

 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()); ) ) )

Uitvoer

 ArithmeticException => / bij nul

Let in het bovenstaande voorbeeld op de regel,

 int divideByZero = 5 / 0;

Hier proberen we een getal door nul te delen . In dit geval treedt er een uitzondering op. Daarom hebben we deze code in het tryblok ingesloten .

Wanneer het programma deze code tegenkomt, ArithmeticExceptiontreedt op. En de uitzondering wordt opgevangen door het catchblok en voert de code binnen het catchblok uit.

Het catchblok wordt alleen uitgevoerd als er een uitzondering in het tryblok bestaat.

Opmerking : in Java kunnen we een tryblok zonder catchblok gebruiken. We kunnen echter geen catchblok zonder tryblok gebruiken.

Java probeer … eindelijk te blokkeren

We kunnen het tryblok ook samen met een eindblok gebruiken.

In dit geval wordt het final-blok altijd uitgevoerd, ongeacht of er een uitzondering in het try-blok zit of niet.

Voorbeeld: Java probeer … eindelijk te blokkeren

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

Uitvoer

 Tenslotte wordt blok altijd uitgevoerd Uitzondering in thread "main" java.lang.ArithmeticException: / door nul op Main.main (Main.java:4)

In het bovenstaande voorbeeld hebben we het tryblok samen met het finallyblok gebruikt. We kunnen zien dat de code in het tryblok een uitzondering veroorzaakt.

De code in het finallyblok wordt echter ongeacht de uitzondering uitgevoerd.

Java probeer … vangen … eindelijk blokkeren

In Java kunnen we ook het laatste blok na het try… catchblok gebruiken. Bijvoorbeeld,

 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(); ) )

Uitvoer

 Try-instructie Exception invoeren => Index 5 buiten bereik voor lengte 5 Afsluiten van PrintWriter

In het bovenstaande voorbeeld hebben we een array gemaakt met de naam list en een bestand met de naam output.txt. Hier proberen we gegevens uit de array te lezen en op te slaan in het bestand.

Let op de code,

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

Hier is de grootte van de array 5en het laatste element van de array is list(4). We proberen echter toegang te krijgen tot elementen op a(5) en a(6).

Daarom genereert de code een uitzondering die wordt opgevangen door het catch-blok.

Omdat het finallyblok altijd wordt uitgevoerd, hebben we code toegevoegd om de PrintWriterbinnenkant van het slotblok te sluiten .

Het is een goede gewoonte om tenslotte block te gebruiken om belangrijke opschoningscode op te nemen, zoals het sluiten van een bestand of verbinding.

Opmerking : er zijn enkele gevallen waarin een finallyblok niet wordt uitgevoerd:

  • Gebruik van System.exit()methode
  • Er treedt een uitzondering op in het finallyblok
  • De dood van een draad

Meerdere Catch-blokken

Voor elk tryblok kunnen er nul of meer catchblokken zijn. Met meerdere catchblokken kunnen we elke uitzondering anders behandelen.

Het argumenttype van elk catchblok geeft het type uitzondering aan dat ermee kan worden afgehandeld. Bijvoorbeeld,

 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(); ) )

Uitvoer

 IndexOutOfBoundsException => Index 10 buiten bereik voor lengte 10

In dit voorbeeld hebben we een array met gehele getallen gemaakt met de naam arrgrootte 10 .

Omdat de array-index begint bij 0 , staat het laatste element van de array op arr(9). Let op de verklaring,

 arr(10) = 11;

Hier proberen we een waarde toe te kennen aan de index 10 . Vandaar dat het IndexOutOfBoundExceptionvoorkomt.

Als er een uitzondering optreedt in het tryblok,

  • De uitzondering wordt naar het eerste catchblok geworpen . Het eerste catchblok behandelt geen an IndexOutOfBoundsException, dus het wordt doorgegeven aan het volgende catchblok.
  • Het tweede catchblok in het bovenstaande voorbeeld is de juiste uitzonderingshandler omdat het een IndexOutOfBoundsException. Daarom wordt het uitgevoerd.

Meerdere uitzonderingen opvangen

Vanaf Java SE 7 en hoger kunnen we nu meer dan één type uitzondering opvangen met één catchblok.

Dit vermindert codeduplicatie en verhoogt de eenvoud en efficiëntie van de code.

Elk uitzonderingstype dat door het catchblok kan worden afgehandeld , wordt gescheiden door middel van een verticale balk |.

De syntaxis is:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )

Ga voor meer informatie naar Java dat meerdere uitzonderingen opvangt.

Java-instructie voor try-with-resources

De instructie try-with-resources is een instructie try met een of meer resource-declaraties.

De syntaxis is:

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

De bron is een object dat aan het einde van het programma moet worden gesloten. Het moet worden gedeclareerd en geïnitialiseerd in de instructie try.

Laten we een voorbeeld nemen.

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

De instructie try-with-resources wordt ook wel automatisch resourcebeheer genoemd . Deze instructie sluit automatisch alle bronnen aan het einde van de instructie.

Ga voor meer informatie naar de java-instructie try-with-resources.

Interessante artikelen...