ใช่ บล็อกสุดท้ายจะถูกดำเนินการเสมอ เว้นแต่จะมีการยุติโปรแกรมที่ผิดปกติซึ่งเป็นผลมาจากการหยุดทำงานของ JVM หรือจากการเรียกไปยัง System.exit()
- ในที่สุดบล็อกจะได้รับการดำเนินการเสมอไม่ว่าจะเกิดข้อยกเว้นหรือไม่
- หากมีข้อยกเว้น เช่น การปิดไฟล์หรือการเชื่อมต่อ DB บล็อกสุดท้ายจะถูกใช้เพื่อล้างโค้ด
- เราไม่สามารถพูดได้ว่าบล็อกสุดท้ายจะทำงานตลอดเวลา เพราะบางครั้งหากคำสั่งใดๆ เช่น System.exit() หรือโค้ดที่คล้ายกันถูกเขียนลงในบล็อก try โปรแกรมจะยุติการทำงานโดยอัตโนมัติและบล็อกสุดท้ายจะไม่ถูกดำเนินการในกรณีนี้
- ในที่สุดบล็อกจะไม่ทำงานเนื่องจากเงื่อนไขอื่นๆ เช่น เมื่อ JVM มีหน่วยความจำไม่เพียงพอเมื่อกระบวนการจาวาของเราถูกฆ่าตายอย่างแรงจากตัวจัดการงานหรือคอนโซลเมื่อเครื่องของเราปิดตัวลงเนื่องจากไฟฟ้าขัดข้องและสภาวะการหยุดชะงักในบล็อกการลองของเรา
ตัวอย่างที่ 1
public class FinallyBlock { public static void main(String args[]){ try { int a=10,b=30; int c = b/a; System.out.println(c); } catch(ArithmeticException ae){ System.out.println(ae); } finally { System.out.println("finally block is always executed"); } } }
ในตัวอย่างข้างต้น บล็อกสุดท้ายจะถูกดำเนินการเสมอหากมีข้อยกเว้นเกิดขึ้นหรือไม่
ผลลัพธ์
3 finally block is always executed
ตัวอย่างที่ 2
public class FinallyBlock { public static void main(String args[]) { try { System.out.println("I am in try block"); System.exit(1); } catch(Exception ex){ ex.printStackTrace(); } finally { System.out.println("I am in finally block"); } } }
ในตัวอย่างข้างต้น บล็อกสุดท้ายจะไม่ทำงานเนื่องจากเงื่อนไข System.exit(1) ในบล็อกการลอง
ผลลัพธ์
I am in try block