Esecuzione del wrapping e ripetizione delle eccezioni in Java

1. Panoramica

La parola chiave throw in Java viene utilizzata per generare esplicitamente un'eccezione personalizzata o un'eccezione incorporata. Ma a volte nel blocco catch , dobbiamo lanciare di nuovo la stessa eccezione. Questo porta a rilanciare un'eccezione.

In questo tutorial, discuteremo i due modi più comuni per rilanciare l'eccezione.

2. Rilanciare le eccezioni

A volte, prima di propagare l'eccezione al livello superiore, potremmo voler eseguire alcune attività. Ad esempio, potremmo voler eseguire il rollback della transazione DB, registrare l'eccezione o inviare un'e-mail.

Possiamo eseguire tali attività nel blocco catch e lanciare nuovamente l'eccezione. In questo modo, un livello superiore viene informato che l'eccezione si è verificata nel sistema.

Comprendiamo il nostro caso con un esempio.

Di seguito, stiamo rilanciando la stessa eccezione. E stiamo registrando un messaggio di errore appena prima di lanciarlo:

String name = null; try { return name.equals("Joe"); // causes NullPointerException } catch (Exception e) { // log throw e; }

La console mostrerà il seguente messaggio:

Exception in thread "main" java.lang.NullPointerException at com.baeldung.exceptions.RethrowSameExceptionDemo.main(RethrowSameExceptionDemo.java:16)

Come possiamo vedere, il nostro codice rilancia ogni eccezione rilevata. Per questo motivo, otteniamo la traccia dello stack originale senza alcuna modifica .

3. Eccezioni di wrapping

Ora, diamo un'occhiata a un approccio diverso.

In questo caso, passeremo la stessa eccezione come riferimento nel costruttore di un'eccezione diversa:

String name = null; try { return name.equals("Joe"); // causes NullPointerException } catch (Exception e) { // log throw new IllegalArgumentException(e); }

La console mostrerà:

Exception in thread "main" java.lang.IllegalArgumentException: java.lang.NullPointerException at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main(RethrowDifferentExceptionDemo.java:24) Caused by: java.lang.NullPointerException at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main(RethrowDifferentExceptionDemo.java:18) 

Questa volta, vediamo l'eccezione originale e quella avvolgente. In questo modo, la nostra istanza IllegalArgumentException avvolge la NullPointerException originale come causa . Quindi possiamo mostrare l'eccezione più specifica invece di mostrare quella generica.

4. Conclusione

In questo breve articolo, abbiamo presentato la principale differenza tra il rilancio dell'eccezione originale e il primo avvolgimento. Entrambi i modi differiscono l'uno dall'altro nel modo in cui mostrano il messaggio di eccezione .

In base al nostro requisito, possiamo rilanciare la stessa eccezione o includerla con un'eccezione specifica utilizzando il secondo approccio. Il secondo approccio sembra più pulito e facile per tornare indietro rispetto all'eccezione .

Come sempre il progetto è disponibile su GitHub.