Các try
Hoàn thành khối với việc thực hiện các return
tuyên bố và giá trị của s
tại thời điểm return
tuyên bố thực hiện là giá trị trả về bởi phương pháp này. Thực tế là finally
mệnh đề sau thay đổi giá trị của s
(sau khi return
câ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 s
chính nó trong finally
khối, không phải đối tượng s
tham chiếu. Nếu s
là một tham chiếu đến một đối tượng có thể thay đổi ( String
không phải) và nội dung của đối tượng đã được thay đổi trong finally
khố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 return
câu lệnh được tính là chấm dứt đột ngột try
khố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 return
tuyê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ả try
khối và finally
khối của try-finally
câu lệnh chấm dứt đột ngột vì các return
câ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 try
khố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ì finally
khối đó được thực thi, và sau đó có một lựa chọn:
- Nếu
finally
khối hoàn thành bình thường, thì try
câu lệnh hoàn thành đột ngột vì lý do R.
- Nếu
finally
khối hoàn thành đột ngột vì lý do S, thì try
câ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à return
câu lệnh trong finally
khối xác định giá trị trả về của toàn bộ try-finally
câu lệnh và giá trị được trả về từ try
khối bị loại bỏ. Một điều tương tự xảy ra trong một try-catch-finally
câu lệnh nếu try
khối ném một ngoại lệ, nó bị bắt bởi một catch
khối và cả catch
khối và finally
khối đều có return
câu lệnh.