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

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:

Ieșire

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.
Test sugerat Editați testul 3 întrebări

Care este scopul principal al excepțiilor înlănțuite în Java?

  • O

    Pentru a ascunde cauza principală a unei excepții

  • B

    Pentru a asocia o excepție cu alta

  • C

    Pentru a îmbunătăți performanța codului

  • D

    Pentru a remedia automat erorile de rulare

Explicaţie:

Excepțiile înlănțuite permit legarea unei excepții la alta pentru a arăta cauza principală.

Ce metodă este folosită pentru a seta cauza unei excepții?

  • O

    getMessage()

  • B

    setException()

  • C

    initCause()

  • D

    initCause()

Explicaţie:

Metoda initCause() stabilește cauza de bază a unei excepții.

În exemplu, ce tip de excepție este setat ca cauză pentru NumberFormatException?

  • O

    IOException

  • B

    ArithmeticException

  • C

    NullPointerException

  • D

    RuntimeException

Explicaţie:

Exemplul setează o excepție NullPointerException ca cauză a excepției NumberFormatException.

Excepții înlănțuite în JavaTest completat cu succes Scorul dvs.:   2 /3 Precizie:  0% Conectați-vă pentru a vizualiza explicația 1 /3 1 /3 < Previous Următorul >