"Ah. Awak ada. Saya cari awak."

"Ada sesuatu berlaku?"

"Tidak, tetapi kami masih belajar."

"OK. Saya dengar."

"Saya ingin memberitahu anda beberapa perkara lagi tentang pengecualian:"

"Dalam Java 7, binaan cuba-tangkap dilanjutkan sedikit melalui penambahan berbilang blok tangkapan. 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 bolehkah kita menulis berbilang pengecualian yang dipisahkan oleh operator OR ('|' ialah perduaan ATAU)?"

"Betul. Bukankah itu selesa?"

"Hmm. Tetapi apakah jenis objek pengecualian di dalam blok tangkapan?"

"Lagipun, IOException mempunyai kaedahnya, dan SQLException mempunyai kaedahnya."

"Jenis pengecualian ialah kelas nenek moyang mereka yang sama."

"Ah. Dalam erti kata lain, kemungkinan besar ia adalah Exeption atau RuntimeException . Jadi kenapa tidak tulis catch(Exception e) sahaja?"

"Kadangkala apabila mengendalikan ralat secara individu, lebih mudah untuk mengumpulkannya, menulis beberapa ralat pada log, membuang semula yang lain dan mengendalikan yang lain dengan cara lain."

"Dengan kata lain, skim ini diiktiraf sebagai menyelesaikan masalah blok tangkapan pendua untuk mengendalikan ralat yang berbeza."

"Ah. Saya faham. Terima kasih, Ellie."

"Bukan itu sahaja. Saya ingin memberitahu anda sedikit lagi tentang blok akhirnya ."

"Seperti yang anda mungkin sudah tahu, blok ini sentiasa dilaksanakan."

"Dan apabila saya katakan selalu, saya maksudkan sentiasa sentiasa ."

"Sebagai contoh:"

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

"Di sini terdapat pengembalian dalam blok cuba , dan pengembalian dalam blok akhirnya . Jadi nilai pulangan kaedah ini ialah nombor 0."

" Blok akhirnya akan dilaksanakan tidak kira apa yang berlaku. Dan penyata pulangannya menimpa nilai pulangan lain dengan nilainya sendiri."

"Saya faham."

"Walau bagaimanapun, kaedah boleh sama ada mengembalikan nilai atau membuang pengecualian. "

"Jadi, jika nilai dikembalikan dalam blok percubaan, tetapi blok akhirnya melemparkan pengecualian , maka hasilnya akan menjadi pengecualian . "

"Bagaimana jika pengecualian dilemparkan dalam blok cuba tetapi blok akhirnya mempunyai pernyataan pulangan?"

"Kemudian ia seolah-olah kaedah itu berfungsi dengan baik dan nilai dalam penyata pulangan dikembalikan.

Contoh Hasilnya
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 sebab kaedah akhirnya mungkin tidak dilaksanakan ialah penamatan segera program melalui panggilan ke kaedah System.exit() ;."

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

"Saya faham."

"Perlu diingat bahawa semua topik ini biasanya ditanya dalam temu bual, jadi adalah baik untuk anda memahami dan mengingatinya."