Pembungkus vs Pengecualian Menurunkan Semula di Java

1. Gambaran keseluruhan

Kata kunci lemparan di Java digunakan untuk secara eksplisit membuang pengecualian khusus atau pengecualian bawaan. Tetapi kadang-kadang di blok tangkapan , kita perlu membuang pengecualian yang sama sekali lagi. Ini membawa kepada pengecualian semula.

Dalam tutorial ini, kita akan membincangkan dua cara yang paling biasa untuk membuang pengecualian.

2. Pengecualian semula

Kadang-kadang sebelum menyebarkan pengecualian ke tahap yang lebih tinggi, kita mungkin ingin melakukan beberapa aktiviti. Sebagai contoh, kami mungkin ingin memutar balik transaksi DB, mencatat pengecualian, atau mengirim e-mel.

Kami dapat melakukan aktiviti seperti itu di blok tangkapan dan membuang pengecualian sekali lagi. Dengan cara ini, tahap yang lebih tinggi diberitahu bahawa pengecualian telah berlaku dalam sistem.

Mari kita fahami kes kita dengan contoh.

Di bawah ini, kami melontarkan semula pengecualian yang sama. Dan, kami mencatat mesej ralat sebelum membuangnya:

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

Konsol akan menunjukkan mesej berikut:

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

Seperti yang dapat kita lihat, kod kita hanya mengubah pengecualian yang terdapat di dalamnya. Oleh kerana itu, kami mendapat jejak timbunan asal tanpa sebarang perubahan .

3. Membungkus Pengecualian

Sekarang, mari kita lihat pendekatan yang berbeza.

Dalam kes ini, kami akan memberikan pengecualian yang sama dengan rujukan dalam pembangun pengecualian yang berbeza:

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

Konsol akan memaparkan:

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) 

Kali ini, kita melihat pengecualian asal dan juga pembungkus. Dengan cara ini, contoh IllegalArgumentException kami membungkus NullPointerException yang asal sebagai penyebabnya . Oleh itu, kita dapat menunjukkan pengecualian yang lebih khusus dan bukannya menunjukkan yang umum.

4. Kesimpulan

Dalam artikel pendek ini, kami membentangkan perbezaan utama antara melemparkan pengecualian semula dengan yang pertama. Kedua-dua cara berbeza antara satu sama lain dalam cara mereka menunjukkan mesej pengecualian .

Berdasarkan keperluan kami, kita boleh membuang pengecualian yang sama atau membungkusnya dengan beberapa pengecualian khusus dengan menggunakan pendekatan kedua. The Pendekatan kedua kelihatan lebih bersih dan mudah untuk menarik balik pengecualian .

Seperti biasa projek ini tersedia di GitHub.