logo

Excepții înlănțuite în Java

Excepțiile înlănțuite în Java permit asocierea unei excepții cu alta, adică o excepție descrie cauza unei alte excepții.

  • De exemplu, luați în considerare o situație în care o metodă aruncă un ArithmeticException din cauza unei încercări de împărțire la zero.
  • Dar cauza principală a erorii a fost o eroare I/O care a făcut ca divizorul să fie zero.
  • În astfel de cazuri, excepțiile înlănțuite ajută la propagarea atât a cauzelor primare, cât și a celor subiacente ale erorii.

Exemplu : Următorul exemplu demonstrează cum să utilizați excepțiile înlănțuite în 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());  }  } } 

Ieșire
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

Nota: Excepțiile înlănțuite, cunoscute și ca excepții imbricate, ne permit să asociem o cauză cu o excepție în Java. Acest lucru este util atunci când dorim să transmitem informații despre cauza inițială a unei excepții.



Constructorii

  • Aruncabil (cauza care poate fi aruncată) : Unde cauza este excepția care provoacă excepția curentă.
  • Throwable(String msg Throwable cause) : unde msg este mesajul de excepție și cauza este excepția care provoacă excepția curentă.

Metode de aruncare susținând excepțiile înlănțuite

  1. getCause() : Această metodă returnează cauza reală a unei excepții.
  2. initCause(cauza care poate fi aruncată) : Această metodă stabilește cauza excepției de apelare.

Exemplu: Utilizarea unui mesaj personalizat cu excepții înlănțuite

În Java putem înlănțui excepții folosind constructorul clasei 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);  }  } } 

Ieșire:

un exemplu de sistem open source este
Ieșire' title=

Explicaţie: În acest exemplu, o matrice de numere întregi și setează divizorul la 0.

  • În interiorul blocului try, încearcă să împartă fiecare element al matricei cu 0, ceea ce aruncă o excepție ArithmeticException.
  • Această excepție ArithmeticException este prinsă în blocul catch unde este creată o nouă excepție RuntimeException cu excepția originală, adică ArithmeticException ca cauză.
  • Deoarece RuntimeException nu este capturată, care afișează urmărirea stivei, inclusiv RuntimeException și ArithmeticException.

Avantajele excepțiilor înlănțuite:

Avantajele excepțiilor înlănțuite sunt enumerate mai jos:

  • Această excepție ajută la depanare, oferind detalii atât despre cauzele primare, cât și despre cauzele principale.
  • Simplifică gestionarea erorilor, permițând propagarea contextului complet de excepție.
  • Acest lucru îmbunătățește trasabilitatea erorilor în aplicațiile complexe.

Dezavantajele excepțiilor înlănțuite:

  • Dacă nu este utilizat în mod corespunzător, poate face trasarea stivei mai lungă și mai greu de citit.
  • Utilizarea excesivă poate cauza mesaje de eroare confuze dacă excepțiile sunt înlănțuite în mod inutil.
  • Dezvoltatorii trebuie să se asigure că cauzele semnificative sunt legate; altfel poate induce în eroare în timpul depanării.