Les exceptions chaînées en Java permettent d'associer une exception à une autre, c'est-à-dire qu'une exception décrit la cause d'une autre exception.
- Par exemple, considérons une situation dans laquelle une méthode lance un ArithmétiqueException à cause d'une tentative de division par zéro.
- Mais la cause première de l’erreur était un échec d’E/S qui faisait que le diviseur était nul.
- Dans de tels cas, les exceptions chaînées contribuent à propager à la fois les causes principales et sous-jacentes de l’erreur.
Exemple : L'exemple suivant montre comment utiliser les exceptions chaînées en Java.
Java// Working of chained exceptions public class Geeks { public static void main(String[] args) { try { // Creating an exception NumberFormatException ex = new NumberFormatException('Primary Exception'); // Setting the cause of the exception ex.initCause(new NullPointerException('Root cause of the exception')); // Throwing the exception with a cause throw ex; } catch (NumberFormatException ex) { // Displaying the primary exception System.out.println('Caught Exception: ' + ex); // Displaying the root cause of the exception System.out.println('Cause of Exception: ' + ex.getCause()); } } }
Sortir
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Note: Les exceptions chaînées, également appelées exceptions imbriquées, nous permettent d'associer une cause à une exception en Java. Ceci est utile lorsque nous souhaitons propager des informations sur la cause initiale d'une exception.
Constructeurs
- Jetable (cause jetable) : Où cause est l'exception qui provoque l'exception actuelle.
- Throwable (String msg Throwable cause) : Où msg est le message d'exception et cause est l'exception qui provoque l'exception actuelle.
Méthodes de prise en charge des exceptions chaînées pouvant être lancées
- getCause() : Cette méthode renvoie la cause réelle d'une exception.
- initCause (cause jetable) : Cette méthode définit la cause de l’exception appelante.
Exemple: Utilisation d'un message personnalisé avec des exceptions chaînées
En Java, nous pouvons enchaîner les exceptions en utilisant le constructeur de la classe Throwable.
Java// Use a custom message with chained exception public class Geeks { public static void main(String[] args) { try { // Code that might throw an exception int[] n = new int[5]; int divisor = 0; for (int i = 0; i < n.length; i++) { int res = n[i] / divisor; System.out.println(res); } } catch (ArithmeticException e) { // Creating a new exception with // the original as the cause throw new RuntimeException ('Error: Division by zero occurred' e); } } }
Sortir:
la chaîne est vide
Explication: Dans cet exemple, un tableau d'entiers et définit le diviseur sur 0.
- À l'intérieur du bloc try, il essaie de diviser chaque élément du tableau par 0, ce qui renvoie une ArithmeticException.
- Cette ArithmeticException est interceptée dans le bloc catch où une nouvelle RuntimeException est créée avec l'exception d'origine, c'est-à-dire ArithmeticException comme cause.
- Étant donné que RuntimeException n'est pas intercepté, ce qui affiche la trace de la pile, y compris RuntimeException et ArithmeticException.
Avantages des exceptions chaînées :
Les avantages des exceptions chaînées sont répertoriés ci-dessous :
- Cette exception facilite le débogage en fournissant des détails sur les causes principales et profondes.
- Il simplifie la gestion des erreurs en permettant la propagation du contexte d'exception complet.
- Cela améliore la traçabilité des erreurs dans les applications complexes.
Inconvénients des exceptions chaînées :
- S'il n'est pas utilisé correctement, cela peut rendre la trace de la pile plus longue et plus difficile à lire.
- Une utilisation excessive peut générer des messages d'erreur déroutants si les exceptions sont enchaînées inutilement.
- Les développeurs doivent s’assurer que les causes significatives sont liées ; sinon cela peut induire en erreur lors du débogage.