Có, các khối cuối cùng luôn chạy ... ngoại trừ khi:
- Chuỗi chạy khối thử-bắt-cuối bị giết hoặc gián đoạn
- Bạn sử dụng
System.exit(0);
- VM bên dưới bị phá hủy theo một cách khác
- Phần cứng bên dưới không thể sử dụng theo một cách nào đó
Ngoài ra, nếu một phương thức trong khối cuối cùng của bạn ném ra một ngoại lệ chưa được lưu, thì không có gì sau đó sẽ được thực thi (tức là ngoại lệ sẽ được ném như trong bất kỳ mã nào khác). Một trường hợp rất phổ biến trong đó điều này xảy ra là java.sql.Connection.close()
.
Bên cạnh đó, tôi đoán rằng mẫu mã bạn đã sử dụng chỉ là một ví dụ, nhưng hãy cẩn thận khi đưa logic thực tế vào trong một khối cuối cùng. Khối cuối cùng được dành cho việc dọn sạch tài nguyên (đóng các kết nối DB, giải phóng các xử lý tệp, v.v.), không phải cho logic phải chạy. Nếu nó phải chạy, hãy làm điều đó trước khối thử bắt, tránh xa thứ gì đó có thể ném ngoại lệ, vì ý định của bạn gần như chắc chắn là giống nhau.