Ya, blok terakhir selalu berjalan ... kecuali ketika:
- Utas yang menjalankan blok coba-tangkap-akhirnya terbunuh atau terputus
- Kau gunakan
System.exit(0);
- VM yang mendasarinya dihancurkan dengan cara lain
- Perangkat keras yang mendasarinya tidak dapat digunakan dalam beberapa cara
Selain itu, jika suatu metode di blok Anda akhirnya melempar pengecualian yang tidak tertangkap, maka tidak ada setelah itu akan dieksekusi (yaitu pengecualian akan dilemparkan seperti halnya dalam kode lainnya). Kasus yang sangat umum dimana ini terjadi adalah java.sql.Connection.close()
.
Sebagai tambahan, saya menduga bahwa contoh kode yang Anda gunakan hanyalah sebuah contoh, tetapi hati-hati menempatkan logika aktual di dalam blok akhirnya. Blok akhirnya ditujukan untuk pembersihan sumber daya (menutup koneksi DB, melepaskan pegangan file dll), bukan untuk logika yang harus dijalankan. Jika harus dijalankan, lakukan sebelum blok coba-tangkap, jauh dari sesuatu yang bisa menimbulkan pengecualian, karena niat Anda hampir pasti sama secara fungsional.