"Ah. Ini dia. Aku sudah mencarimu."

"Apakah sesuatu terjadi?"

"Tidak, tapi kami masih belajar."

"Oke. Aku mendengarkan."

"Saya ingin memberi tahu Anda beberapa hal lagi tentang pengecualian:"

"Di Java 7, konstruksi try-catch diperluas sedikit melalui penambahan beberapa blok catch. Lihat contoh ini:"

Jawa 5
try
{
  …
}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Jawa 7
try
{
  …
}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"Jadi sekarang bisakah kita menulis beberapa pengecualian yang dipisahkan oleh operator OR ('|' adalah biner ATAU)?"

"Benar. Bukankah itu nyaman?"

"Hmm. Tapi apa jenis objek pengecualian di dalam blok tangkap?"

"Lagipula, IOException memiliki metodenya, dan SQLException memiliki metodenya."

"Tipe pengecualian adalah kelas nenek moyang mereka yang sama."

"Ah. Dengan kata lain, kemungkinan besar Exeption atau RuntimeException . Lalu mengapa tidak menulis saja catch(Exception e)?"

"Kadang-kadang saat menangani kesalahan satu per satu, akan lebih mudah untuk mengelompokkannya, menulis beberapa kesalahan ke log, memasukkan kembali yang lain, dan menangani yang lain dengan cara lain."

"Dengan kata lain, skema ini diakui sebagai pemecahan masalah blok tangkapan duplikat untuk menangani kesalahan yang berbeda."

"Ah. Aku mengerti. Terima kasih, Ellie."

"Bukan itu saja. Aku ingin memberitahumu lebih banyak tentang blok terakhir ."

"Seperti yang mungkin sudah Anda ketahui, blok ini selalu dijalankan."

"Dan ketika saya mengatakan selalu, maksud saya benar-benar selalu ."

"Misalnya:"

Contoh menggunakan akhirnya
try
{
 return 1;
}
 finally
{
 return 0;
}

"Di sini ada pengembalian di blok coba , dan pengembalian di blok terakhir . Jadi nilai pengembalian metode ini adalah angka 0."

" Blok terakhir akan mengeksekusi apa pun yang terjadi. Dan pernyataan pengembaliannya menimpa nilai pengembalian lainnya dengan nilainya sendiri."

"Jadi begitu."

"Namun, metode dapat mengembalikan nilai atau melemparkan pengecualian. "

"Jadi, jika suatu nilai dikembalikan dalam blok percobaan, tetapi blok terakhir mengeluarkan pengecualian , maka hasilnya akan menjadi pengecualian . "

"Bagaimana jika pengecualian dilemparkan ke dalam blok percobaan tetapi blok terakhir memiliki pernyataan pengembalian?"

"Maka seolah-olah metode tersebut bekerja dengan baik dan nilai dalam pernyataan pengembalian dikembalikan.

Contoh Hasil
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
RuntimeException
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

"Satu-satunya alasan metode finally mungkin tidak dijalankan adalah penghentian langsung program dengan panggilan ke metode System.exit();. "

Contoh
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Jadi begitu."

"Perlu diingat bahwa semua topik ini biasanya ditanyakan dalam wawancara, jadi sebaiknya Anda memahami dan mengingatnya."