Blok terakhir selalu dijalankan setelah blok percobaan berakhir, apakah percobaan berakhir secara normal atau tidak normal karena pengecualian, er, dapat dibuang.
Jika pengecualian dilempar oleh salah satu kode dalam blok percobaan, maka metode saat ini hanya melempar kembali (atau terus melempar) pengecualian yang sama (setelah menjalankan blok akhirnya).
Jika blok terakhir melempar pengecualian / kesalahan / dapat dibuang, dan sudah ada lemparan tertunda, itu menjadi jelek. Sejujurnya, saya lupa persis apa yang terjadi (begitu banyak untuk sertifikasi saya bertahun-tahun yang lalu). Saya pikir kedua lemparan terhubung bersama, tetapi ada beberapa voodoo khusus yang harus Anda lakukan (yaitu - panggilan metode yang harus saya cari) untuk mendapatkan masalah asli sebelum "akhirnya" muntah, er, muntah.
Kebetulan, coba / akhirnya adalah hal yang cukup umum untuk dilakukan untuk manajemen sumber daya, karena java tidak memiliki destruktor.
Mis -
r = new LeakyThing();
try { useResource( r); }
finally { r.release(); } // close, destroy, etc
"Akhirnya", satu tip lagi: jika Anda repot - repot memasukkan tangkapan, baik menangkap subkelas throwable spesifik (yang diharapkan), atau cukup menangkap "Throwable", bukan "Exception", untuk perangkap kesalahan umum semua. Terlalu banyak masalah, seperti kesalahan refleksi, melempar "Kesalahan", bukan "Pengecualian", dan masalah itu akan hilang dengan benar oleh "tangkap semua" yang dikodekan sebagai:
catch ( Exception e) ... // doesn't really catch *all*, eh?
lakukan ini sebagai gantinya:
catch ( Throwable t) ...