Dans ce didacticiel, nous allons découvrir l'instruction try catch en Java à l'aide d'exemples.
Le try… catch
bloc en Java est utilisé pour gérer les exceptions et empêche l'arrêt anormal du programme.
Voici la syntaxe d'un try… catch
bloc en Java.
try( // code ) catch(exception) ( // code )
Le try
bloc comprend le code susceptible de générer une exception.
Le catch
bloc comprend le code qui est exécuté lorsqu'une exception se produit à l'intérieur du try
bloc.
Exemple: 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()); ) ) )
Production
ArithmeticException => / par zéro
Dans l'exemple ci-dessus, notez la ligne,
int divideByZero = 5 / 0;
Ici, nous essayons de diviser un nombre par zéro . Dans ce cas, une exception se produit. Par conséquent, nous avons inclus ce code à l'intérieur du try
bloc.
Lorsque le programme rencontre ce code, ArithmeticException
se produit. Et, l'exception est interceptée par le catch
bloc et exécute le code à l'intérieur du catch
bloc.
Le catch
bloc n'est exécuté que s'il existe une exception à l'intérieur du try
bloc.
Remarque : en Java, nous pouvons utiliser un try
bloc sans catch
bloc. Cependant, nous ne pouvons pas utiliser un catch
bloc sans try
bloc.
Java essayer… enfin bloquer
Nous pouvons également utiliser le try
bloc avec un bloc finally.
Dans ce cas, le bloc finally est toujours exécuté, qu'il y ait une exception à l'intérieur du bloc try ou non.
Exemple: Java try… finally block
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Production
Enfin le bloc est toujours exécuté Exception dans le thread "main" java.lang.ArithmeticException: / par zéro à Main.main (Main.java:4)
Dans l'exemple ci-dessus, nous avons utilisé le try
bloc avec le finally
bloc. Nous pouvons voir que le code à l'intérieur du try
bloc provoque une exception.
Cependant, le code à l'intérieur du finally
bloc est exécuté indépendamment de l'exception.
Java essayer… attraper… enfin bloquer
En Java, nous pouvons également utiliser le bloc finally après le try… catch
bloc. Par exemple,
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(); ) )
Production
Saisie de l'instruction try Exception => Index 5 hors limites pour la longueur 5 Fermeture de PrintWriter
Dans l'exemple ci-dessus, nous avons créé un tableau nommé list et un fichier nommé output.txt. Ici, nous essayons de lire les données du tableau et de les stocker dans le fichier.
Notez le code,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Ici, la taille du tableau est 5
et le dernier élément du tableau est à list(4)
. Cependant, nous essayons d'accéder aux éléments à a(5)
et a(6)
.
Par conséquent, le code génère une exception qui est interceptée par le bloc catch.
Puisque le finally
bloc est toujours exécuté, nous avons inclus du code pour fermer l' PrintWriter
intérieur du bloc finally.
Il est recommandé d'utiliser finally block pour inclure un code de nettoyage important comme la fermeture d'un fichier ou d'une connexion.
Remarque : dans certains cas, un finally
bloc ne s'exécute pas:
- Utilisation de la
System.exit()
méthode - Une exception se produit dans le
finally
bloc - La mort d'un fil
Plusieurs blocs Catch
Pour chaque try
bloc, il peut y avoir zéro ou plusieurs catch
blocs. Plusieurs catch
blocs nous permettent de gérer chaque exception différemment.
Le type d'argument de chaque catch
bloc indique le type d'exception qu'il peut gérer. Par exemple,
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(); ) )
Production
IndexOutOfBoundsException => Index 10 hors limites pour la longueur 10
Dans cet exemple, nous avons créé un tableau d'entiers nommé arr
de taille 10 .
Puisque l'index du tableau commence à 0 , le dernier élément du tableau est à arr(9)
. Notez la déclaration,
arr(10) = 11;
Ici, nous essayons d'attribuer une valeur à l'index 10 . Par conséquent, IndexOutOfBoundException
se produit.
Lorsqu'une exception se produit dans le try
bloc,
- L'exception est renvoyée au premier
catch
bloc. Le premiercatch
bloc ne gère pas anIndexOutOfBoundsException
, il est donc passé aucatch
bloc suivant . - Le deuxième
catch
bloc de l'exemple ci-dessus est le gestionnaire d'exceptions approprié car il gère un fichierIndexOutOfBoundsException
. Par conséquent, il est exécuté.
Attraper plusieurs exceptions
À partir de Java SE 7 et versions ultérieures, nous pouvons désormais intercepter plus d'un type d'exception avec un catch
bloc.
Cela réduit la duplication de code et augmente la simplicité et l'efficacité du code.
Chaque type d'exception qui peut être traité par le catch
bloc est séparé à l'aide d'une barre verticale |
.
Sa syntaxe est:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Pour en savoir plus, visitez Java attraper plusieurs exceptions.
Instruction Java try-with-resources
L' instruction try-with-resources est une instruction try qui a une ou plusieurs déclarations de ressources.
Sa syntaxe est:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
La ressource est un objet à fermer à la fin du programme. Il doit être déclaré et initialisé dans l'instruction try.
Prenons un exemple.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
L' instruction try-with-resources est également appelée gestion automatique des ressources . Cette instruction ferme automatiquement toutes les ressources à la fin de l'instruction.
Pour en savoir plus, consultez l'instruction java try-with-resources.