ใช่ บล็อกสุดท้ายจะถูกดำเนินการเสมอ เว้นแต่จะมีการยุติโปรแกรมที่ผิดปกติซึ่งเป็นผลมาจากการหยุดทำงานของ 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