Các tryHoàn thành khối với việc thực hiện các returntuyên bố và giá trị của stại thời điểm returntuyên bố thực hiện là giá trị trả về bởi phương pháp này. Thực tế là finallymệnh đề sau thay đổi giá trị của s(sau khi returncâu lệnh hoàn thành) không (tại thời điểm đó) thay đổi giá trị trả về.
Lưu ý rằng các thỏa thuận trên liên quan đến các thay đổi đối với giá trị của schính nó trong finallykhối, không phải đối tượng stham chiếu. Nếu slà một tham chiếu đến một đối tượng có thể thay đổi ( Stringkhông phải) và nội dung của đối tượng đã được thay đổi trong finallykhối, thì những thay đổi đó sẽ được nhìn thấy trong giá trị được trả về.
Các quy tắc chi tiết về cách tất cả các hoạt động này có thể được tìm thấy trong Phần 14.20.2 của Đặc tả ngôn ngữ Java . Lưu ý rằng việc thực thi một returncâu lệnh được tính là chấm dứt đột ngột trykhối (phần bắt đầu " Nếu việc thực thi khối thử hoàn thành đột ngột vì bất kỳ lý do nào khác R .... " được áp dụng). Xem Phần 14,17 của JLS để biết lý do tại sao một returntuyên bố là chấm dứt đột ngột của một khối.
Bằng cách chi tiết hơn: nếu cả trykhối và finallykhối của try-finallycâu lệnh chấm dứt đột ngột vì các returncâu lệnh, thì các quy tắc sau từ §14.20.2 được áp dụng:
Nếu việc thực thi trykhối hoàn thành đột ngột vì bất kỳ lý do nào khác R [ngoài việc ném ngoại lệ], thì finallykhối đó được thực thi, và sau đó có một lựa chọn:
- Nếu
finallykhối hoàn thành bình thường, thì trycâu lệnh hoàn thành đột ngột vì lý do R.
- Nếu
finallykhối hoàn thành đột ngột vì lý do S, thì trycâu lệnh hoàn thành đột ngột vì lý do S (và lý do R bị loại bỏ).
Kết quả là returncâu lệnh trong finallykhối xác định giá trị trả về của toàn bộ try-finallycâu lệnh và giá trị được trả về từ trykhối bị loại bỏ. Một điều tương tự xảy ra trong một try-catch-finallycâu lệnh nếu trykhối ném một ngoại lệ, nó bị bắt bởi một catchkhối và cả catchkhối và finallykhối đều có returncâu lệnh.