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
- getCause() : Această metodă returnează cauza reală a unei excepții.
- 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:
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.
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
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()
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
Exemplul setează o excepție NullPointerException ca cauză a excepției NumberFormatException.
Test completat cu succes Scorul dvs.: 2 /3 Precizie: 0% Conectați-vă pentru a vizualiza explicația 1 /3 1 /3 < Previous Următorul >