Khối try
hoàn thành với việc thực thi câu lệnh return
và giá trị s
tại thời điểm thực hiện câu lệnh return
là giá trị được trả về bởi phương thức. Thực tế là mệnh đề finally
sau này thay đổi giá trị s
(sau khi hoàn thành câu lệnh return
) không (tại thời điểm đó) thay đổi giá trị trả lại.
Lưu ý rằng các giao dịch trên có các thay đổi đối với giá trị của s
chính nó trong khối finally
, không phải đối tượng mà tham chiếu s
. Nếu s
là tham chiếu đến đối tượng có thể thay đổi (không String
không) và nội dung của đối tượng đã được thay đổi trong khối finally
, thì những thay đổi đó sẽ được nhìn thấy trong giá trị trả về.
Quy tắc chi tiết về cách tất cả các thao tác này có thể được tìm thấy trong Section 14.20.2 of the Java Language Specification. Lưu ý rằng việc thực thi câu lệnh return
được tính là chấm dứt đột ngột khối try
(phần bắt đầu "Nếu việc thực hiện khối thử hoàn tất đột ngột vì bất kỳ lý do nào khác R ...." được áp dụng). Xem Section 14.17 of the JLS vì sao câu hỏi return
là chấm dứt đột ngột một khối.
Bằng cách chi tiết hơn nữa: nếu cả try
khối và finally
khối của một tuyên bố try-finally
chấm dứt đột ngột vì return
báo cáo, sau đó các quy tắc sau đây từ §14.20.2 áp dụng:
Nếu thực hiện của khối try
hoàn thành đột ngột vì bất kỳ lý do nào khác R [ngoài việc ném một ngoại lệ], thì khối finally
được thực hiện và sau đó có một lựa chọn:
- Nếu khối
finally
hoàn bình thường, sau đó báo cáo kết quả try
hoàn đột ngột vì lý do R.
- Nếu khối
finally
hoàn đột ngột vì lý do S, sau đó báo cáo kết quả try
hoàn đột ngột vì lý do S (và lý trí R được loại bỏ).
Kết quả là các return
tuyên bố trong khối finally
xác định giá trị trở lại của toàn bộ câu lệnh try-finally
, và giá trị trả về từ khối try
được loại bỏ.Một điều tương tự xảy ra trong câu lệnh try-catch-finally
nếu khối try
ném ngoại lệ, nó bị chặn bởi khối catch
và cả khối catch
và khối finally
có các câu hỏi return
.
Nguồn
2013-04-16 07:13:40
obj.foo() trả về giá trị của s; – Devendra
bạn nên đặt câu lệnh trả về trên khối cuối cùng, lặp lại với tôi, cuối cùng khối luôn được thực hiện –
khi thử chặn trả lại số – Devendra