Omotavanje vs vraćanje iznimaka u Javi

1. Pregled

The bacanje Ključna riječ u Javi koristi se za izričito izbacivanje ili prilagođene iznimke ili ugrađene iznimke. Ali ponekad u ulov blok, moramo ponovno baciti istu iznimku. To dovodi do ponovnog ubacivanja iznimke.

U ovom uputstvu razgovarat ćemo o dva najčešća načina ponovnog dodavanja iznimke.

2. Izbacivanje izuzetaka

Ponekad bismo prije širenja iznimke na višu razinu mogli htjeti obaviti neke aktivnosti. Na primjer, možda bismo htjeli vratiti DB transakciju, zabilježiti iznimku ili poslati e-poštu.

Takve aktivnosti možemo izvoditi u bloku catch i ponovno izbaciti iznimku. Na taj način viša razina dobiva obavijest da se u sustavu dogodila iznimka.

Razumijemo naš slučaj na primjeru.

Ispod, ponovno bacamo istu iznimku. I bilježimo poruku o pogrešci neposredno prije bacanja:

Naziv niza = null; pokušajte {vratiti ime.equals ("Joe"); // uzrokuje NullPointerException} catch (Exception e) {// log throw e; }

Konzola će prikazati sljedeću poruku:

Iznimka u niti "main" java.lang.NullPointerException na com.baeldung.exceptions.RethrowSameExceptionDemo.main (RethrowSameExceptionDemo.java:16)

Kao što vidimo, naš kod samo vraća svaku iznimku koju uhvati. Zbog toga smo dobili izvorni trag stoga bez ikakvih promjena.

3. Iznimke umotavanja

Pogledajmo sada drugačiji pristup.

U ovom ćemo slučaju proslijediti istu iznimku kao referencu u konstruktoru druge iznimke:

Naziv niza = null; pokušajte {vratiti ime.equals ("Joe"); // uzrokuje NullPointerException} catch (Exception e) {// log throw new IllegalArgumentException (e); }

Konzola će prikazati:

Iznimka u niti "main" java.lang.IllegalArgumentException: java.lang.NullPointerException na com.baeldung.exceptions.RethrowDifferentExceptionDemo.main (RethrowDifferentExceptionDemo.java:24) .main (RethrowDifferentExceptionDemo.java:18) 

Ovaj put vidimo izvornu iznimku kao i onu koja se zamotava. Na ovaj način, naše IlegalArgumentException instanca omotava izvornik NullPointerException kao uzrok. Stoga možemo pokazati konkretniju iznimku umjesto da prikazujemo generičku.

4. Zaključak

U ovom smo kratkom članku predstavili glavnu razliku između ponovnog ubacivanja izvorne iznimke u odnosu na prvo umatanje. Oba smjerameđusobno se razlikuju po načinu na koji pokazuju poruku o iznimci.

Na temelju našeg zahtjeva, možemo ponovno izbaciti istu iznimku ili je omotati nekom posebnom iznimkom koristeći drugi pristup. Thedrugi pristup izgleda čistije i lako je vratiti iznimku.

Kao i uvijek projekt je dostupan na GitHub-u.