tryเสร็จสมบูรณ์บล็อกที่มีการดำเนินการของreturnคำสั่งและความคุ้มค่าของsในขณะที่returnคำสั่งดำเนินการเป็นค่าส่งกลับโดยวิธีการ ความจริงที่ว่าfinallyข้อในภายหลังเปลี่ยนค่าของs(หลังจากreturnคำสั่งเสร็จสมบูรณ์) ไม่ได้ (ณ จุดนั้น) เปลี่ยนค่าตอบแทน
โปรดทราบว่าข้อตกลงด้านบนเกี่ยวข้องกับการเปลี่ยนแปลงมูลค่าของsตัวเองในfinallyบล็อกไม่ใช่วัตถุที่sอ้างอิง หากsมีการอ้างอิงถึงวัตถุที่ไม่แน่นอน (ซึ่งStringไม่ใช่) และเนื้อหาของวัตถุถูกเปลี่ยนแปลงในfinallyบล็อกการเปลี่ยนแปลงเหล่านั้นจะถูกมองเห็นในค่าที่ส่งคืน
กฎรายละเอียดสำหรับวิธีการดำเนินการทั้งหมดนี้สามารถพบได้ในมาตรา 14.20.2 ของ Java Language ข้อกำหนด โปรดทราบว่าการประมวลผลreturnคำสั่งจะนับเป็นการยกเลิกtryบล็อกอย่างกะทันหัน(ส่วนที่เริ่มต้น " หากการดำเนินการบล็อกลองเสร็จสมบูรณ์ในทันทีด้วยเหตุผลอื่นใดก็ตาม R .... " ใช้) ดูส่วนที่ 14.17 ของ JLSเพราะเหตุใดreturnคำสั่งจึงสิ้นสุดการบล็อกโดยทันที
โดยรายละเอียดเพิ่มเติม: หากทั้งtryบล็อกและfinallyบล็อกของtry-finallyคำสั่งสิ้นสุดลงอย่างกะทันหันเนื่องจากreturnคำสั่งให้ใช้กฎต่อไปนี้ตั้งแต่ 14.20.2:
หากการดำเนินการtryบล็อกเสร็จสมบูรณ์ในทันทีด้วยเหตุผลอื่นใด R [นอกเหนือจากการโยนข้อยกเว้น] finallyบล็อกนั้นจะถูกดำเนินการและจากนั้นก็มีทางเลือก:
- หาก
finallyบล็อกดำเนินการตามปกติtryคำสั่งจะเสร็จสมบูรณ์โดยทันทีด้วยเหตุผล R
- หาก
finallyบล็อกเสร็จสมบูรณ์อย่างกะทันหันด้วยเหตุผล S tryคำสั่งนั้นจะเสร็จสมบูรณ์ทันทีสำหรับเหตุผล S (และเหตุผล R ถูกยกเลิก)
ผลลัพธ์คือreturnคำสั่งในfinallyบล็อกจะกำหนดค่าส่งคืนของtry-finallyคำสั่งทั้งหมดและค่าที่ส่งคืนจากtryบล็อกนั้นจะถูกยกเลิก สิ่งที่คล้ายกันเกิดขึ้นในtry-catch-finallyคำสั่งถ้าtryบล็อกส่งข้อยกเว้นมันถูกcatchบล็อกโดยบล็อกและทั้งcatchบล็อกและfinallyบล็อกมีreturnคำสั่ง