ใช่บล็อกสุดท้ายจะทำงานเสมอ ... ยกเว้นเมื่อ:
- เธรดที่ใช้บล็อก try-catch-สุดท้ายถูกฆ่าหรือขัดจังหวะ
- คุณใช้
System.exit(0);
- VM พื้นฐานถูกทำลายด้วยวิธีอื่น
- ฮาร์ดแวร์พื้นฐานไม่สามารถใช้งานได้ในบางวิธี
นอกจากนี้หากวิธีการในบล็อกสุดท้ายของคุณส่งข้อยกเว้นที่ไม่ได้ตรวจสอบจะไม่มีการดำเนินการใด ๆ หลังจากนั้น (เช่นข้อยกเว้นจะถูกโยนทิ้งเหมือนที่ทำในรหัสอื่น) java.sql.Connection.close()
กรณีที่พบบ่อยมากที่เกิดเหตุการณ์นี้คือ
นอกจากนี้ฉันเดาว่าตัวอย่างโค้ดที่คุณใช้เป็นเพียงตัวอย่าง แต่ระวังการใส่ตรรกะที่แท้จริงลงในบล็อกในที่สุด ในที่สุดบล็อกมีไว้สำหรับการล้างทรัพยากร (ปิดการเชื่อมต่อฐานข้อมูลปล่อยไฟล์จัดการ ฯลฯ ) ไม่ใช่สำหรับตรรกะที่ต้องรัน หากต้องดำเนินการก่อนบล็อก try-catch ให้ห่างจากสิ่งที่อาจทำให้เกิดข้อยกเว้นเนื่องจากความตั้งใจของคุณเกือบจะเหมือนกันทุกประการ