Eccezioni concatenate in Java
Le eccezioni concatenate in Java consentono di associare un'eccezione a un'altra, ovvero un'eccezione descrive la causa di un'altra eccezione.
- Ad esempio, considera una situazione in cui un metodo lancia un ArithmeticException a causa del tentativo di dividere per zero.
- Ma la causa principale dell'errore era un errore I/O che faceva sì che il divisore fosse zero.
- In questi casi le eccezioni concatenate aiutano a propagare sia la causa primaria che quella sottostante dell'errore.
Esempio : L'esempio seguente dimostra come utilizzare le eccezioni concatenate in 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 ()); } } }
Produzione
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Nota: Le eccezioni concatenate, note anche come eccezioni nidificate, ci consentono di associare una causa a un'eccezione in Java. Ciò è utile quando vogliamo propagare le informazioni sulla causa originale di un'eccezione.
Costruttori
- Gettabile (causa gettabile) : dove causa è l'eccezione che causa l'eccezione corrente.
- Throwable (causa stringa messaggio lanciabile) : Dove msg è il messaggio di eccezione e causa è l'eccezione che causa l'eccezione corrente.
Metodi di supporto lanciabile per eccezioni concatenate
- getCause() : questo metodo restituisce la causa effettiva di un'eccezione.
- initCause(Causa lanciabile) : questo metodo imposta la causa dell'eccezione di chiamata.
Esempio: Utilizzo di un messaggio personalizzato con eccezioni concatenate
In Java possiamo concatenare eccezioni utilizzando il costruttore della 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 ); } } }
Produzione:
Spiegazione: In questo esempio un array di numeri interi e imposta il divisore su 0.
- All'interno del blocco try tenta di dividere ogni elemento dell'array per 0, generando un'ArithmeticException.
- Questa ArithmeticException viene catturata nel blocco catch in cui viene creata una nuova RuntimeException con l'eccezione originale, ovvero ArithmeticException come causa.
- Poiché non viene rilevata RuntimeException, viene visualizzata la traccia dello stack che include RuntimeException e ArithmeticException.
Vantaggi delle eccezioni concatenate:
I vantaggi delle eccezioni concatenate sono elencati di seguito:
- Questa eccezione aiuta nel debug fornendo dettagli sia sulle cause primarie che su quelle radice.
- Semplifica la gestione degli errori consentendo la propagazione del contesto completo dell'eccezione.
- Ciò migliora la tracciabilità degli errori nelle applicazioni complesse.
Svantaggi delle eccezioni concatenate:
- Se non utilizzato correttamente può rendere l'analisi dello stack più lunga e più difficile da leggere.
- Un utilizzo eccessivo può causare messaggi di errore confusi se le eccezioni vengono concatenate inutilmente.
- Gli sviluppatori devono garantire che le cause significative siano collegate; altrimenti può trarre in inganno durante il debug.
Qual è lo scopo principale delle eccezioni concatenate in Java?
- UN
Per nascondere la causa principale di un'eccezione
- B
Per associare un'eccezione a un'altra
- C
Per migliorare le prestazioni del codice
- D
Per correggere automaticamente gli errori di runtime
Le eccezioni concatenate consentono di collegare un'eccezione a un'altra per mostrare la causa principale.
Quale metodo viene utilizzato per impostare la causa di un'eccezione?
- UN
getMessaggio()
- B
setException()
- C
initCausa()
- D
initCausa()
Il metodo initCause() imposta la causa sottostante di un'eccezione.
Nell'esempio quale tipo di eccezione viene impostata come causa di NumberFormatException?
- UN
IOException
- B
ArithmeticException
- C
NullPointerException
- D
RuntimeException
L'esempio imposta una NullPointerException come causa di NumberFormatException.
Quiz completato con successo Il tuo punteggio: 2 /3 Precisione: 0% Accedi per visualizzare la spiegazione 1 /3 1 /3 < Previous Avanti >