เมื่อข้อยกเว้นถูกโยนลงไปการดำเนินการของวิธีปกติจะทำให้การเลี้ยวแบบไม่เชิงเส้นสูงชัน ขึ้นอยู่กับวิธีการเข้ารหัสวิธีการยกเว้นอาจทำให้วิธีการกลับมาก่อนเวลาก่อนเวลาอันควร นี่เป็นปัญหาในบางวิธี ตัวอย่างเช่นหากเมธอดเปิดรายการไฟล์และปิดแล้วออกจากนั้นคุณไม่ต้องการให้รหัสที่ปิดไฟล์ที่จะถูกข้ามโดยกลไกการจัดการข้อยกเว้น คำหลักในที่สุดได้รับการออกแบบมาเพื่อจัดการกับอุบัติเหตุดังกล่าว
ในที่สุดก็สร้างบล็อกรหัส บล็อกรหัสนี้จะถูกดำเนินการก่อนที่จะลอง/จับอีกครั้งจะปรากฏขึ้นหลังจากบล็อกลอง/จับหนึ่งครั้งเสร็จสมบูรณ์ ในที่สุดบล็อกจะถูกดำเนินการโดยไม่คำนึงว่ามีข้อยกเว้นหรือไม่ หากข้อยกเว้นถูกโยนลงไปในที่สุดจะถูกดำเนินการแม้จะไม่มีประโยคจับที่ตรงกับข้อยกเว้น วิธีการจะถูกส่งคืนจากบล็อกลอง/จับไปยังโปรแกรมการโทรทุกครั้งที่มีการเรียกหลังจากข้อยกเว้นที่ไม่ถูกต้องหรือคำสั่งคืนที่ชัดเจนประโยคสุดท้ายจะยังคงดำเนินการก่อนที่วิธีการส่งคืน สิ่งนี้มีประโยชน์เมื่อปิดการจับไฟล์และปลดปล่อยทรัพยากรอื่น ๆ ที่จัดสรรไว้ที่จุดเริ่มต้นของวิธีการ ประโยคในที่สุดเป็นทางเลือกไม่ว่าจะมีหรือไม่มี อย่างไรก็ตามแต่ละคำสั่งลองต้องใช้อย่างน้อยหนึ่งครั้งหรือประโยคในที่สุด
ตัวอย่างต่อไปนี้แสดง 3 วิธีการออกที่แตกต่างกัน แต่ละประโยคดำเนินการในที่สุด:
// แสดงให้เห็นในที่สุด class ในที่สุด {// ผ่านข้อยกเว้นจากวิธีการ System.out.println ("ในที่สุด Proca"); . out.println ("ในที่สุดของ Procb"); "ในที่สุดของ Procc"); ();}}
ในตัวอย่างนี้ proca () ขัดจังหวะการลองก่อนกำหนดโดยการโยนข้อยกเว้น ประโยคสุดท้ายจะดำเนินการเมื่อออกจากทางออก คำสั่ง procb () ลองออกจากคำสั่งคืน ประโยคสุดท้ายจะถูกดำเนินการก่อนที่จะส่งคืน procb () ใน procc () คำสั่งลองดำเนินการตามปกติโดยไม่มีข้อผิดพลาด อย่างไรก็ตามในที่สุดบล็อกจะยังคงดำเนินการ
หมายเหตุ: หากมีการใช้บล็อกในที่สุดร่วมกับการลองบล็อกในที่สุดจะถูกดำเนินการก่อนที่จะสิ้นสุดการลอง
ต่อไปนี้เป็นผลลัพธ์ที่สร้างขึ้นโดยโปรแกรมข้างต้น:
ภายใน Procaproca ในที่สุดของ Procaproca camedinside schedinside procbprocb ในที่สุด proccprocc ของ proccprocc ในที่สุด