Kivételek burkolása és visszadobása a Java-ban

1. Áttekintés

A dobás kulcsszó a Java-ban kifejezetten egyedi vagy beépített kivétel dobására szolgál. De néha a fogás blokk, újra meg kell dobnunk ugyanazt a kivételt. Ez újbóli kivételt eredményez.

Ebben az oktatóanyagban a kivétel újbóli eldobásának két leggyakoribb módját fogjuk megvitatni.

2. Kivételek újradobása

Előfordulhat, hogy a kivétel magasabb szintre terjesztése előtt érdemes néhány tevékenységet végrehajtani. Például visszavonhatjuk a DB tranzakciót, naplózhatjuk a kivételt vagy e-mailt küldhetünk.

A fogási blokkban végezhetünk ilyen tevékenységeket, és újra dobhatjuk a kivételt. Ily módon egy magasabb szint értesítést kap arról, hogy a rendszerben történt kivétel.

Értsük meg esetünket egy példával.

Az alábbiakban ugyanezt a kivételt vetjük újra. És egy hibaüzenetet naplózunk közvetlenül a dobás előtt:

Karakterlánc neve = null; próbáld ki a {return name.equals ("Joe") parancsot; // okozza a NullPointerException} fogást (e kivétel) {// log dob e; }

A konzol a következő üzenetet jeleníti meg:

Kivétel a "main" szálban java.lang.NullPointerException at com.baeldung.exceptions.RethrowSameExceptionDemo.main (RethrowSameExceptionDemo.java:16)

Mint láthatjuk, a kódunk csak visszahozza az általa elért kivételeket. Emiatt megkapjuk a eredeti verem nyomkövetés változtatások nélkül.

3. Csomagolási kivételek

Most nézzünk meg egy másik megközelítést.

Ebben az esetben ugyanazt a kivételt adjuk át, mint egy másik kivétel konstruktorának referenciáját:

Karakterlánc neve = null; próbáld ki a {return name.equals ("Joe") parancsot; // okozza a NullPointerException} fogást (e kivétel) {// napló dobása új IllegalArgumentException (e); }

A konzol a következőket jeleníti meg:

Kivétel a "main" szálban java.lang.IllegalArgumentException: java.lang.NullPointerException at com.baeldung.exceptions.RethrowDifferExceptionDemo.main (RethrowDifferExceptionDemo.java:24) .main (RethrowDifferentExceptionDemo.java:18) 

Ezúttal az eredeti kivételt és a csomagolót is látjuk. Ily módon a mi IllegalArgumentException példány beburkolja az eredetit NullPointerException mint ok. Ezért az általános kivétel helyett a konkrétabb kivételt is megmutathatjuk.

4. Következtetés

Ebben a rövid cikkben bemutattuk a fő különbséget az eredeti kivétel újbóli dobása és az első becsomagolása között. Mindkét iránybanabban különböznek egymástól, hogy megmutatják a kivétel üzenetet.

Követelményünk alapján vagy újra dobhatjuk ugyanazt a kivételt, vagy beburkolhatjuk valamilyen konkrét kivétellel a második megközelítés alkalmazásával. Aa második megközelítés tisztábbnak tűnik és könnyen visszavezethető a kivétel.

Mint mindig, a projekt elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found