ใช่ finally block ทำงานเสมอ เว้นแต่มี abnormal program termination จาก JVM crash หรือจากการเรียก System.exit()
- Finally block ทำงานเสมอ ไม่ว่าจะมี exception เกิดขึ้นหรือไม่
- ถ้ามี exception เกิดขึ้น เช่น ปิดไฟล์หรือ DB connection finally block ใช้ทำ clean up code
- เรา ไม่สามารถบอกได้ว่า finally block ทำงานเสมอ เพราะบางครั้งถ้ามี statement เช่น System.exit() หรือโค้ดคล้ายๆ นี้ใน try block โปรแกรมจะ terminate อัตโนมัติ และ finally block จะไม่ execute ในกรณีนี้
- Finally block จะไม่ execute จากเงื่อนไขอื่นๆ เช่น JVM หมดหน่วยความจำ ตอน java process ถูก kill บังคับจาก task manager หรือ console ตอนเครื่องปิดจาก power failure และ deadlock condition ใน try block
ตัวอย่างที่ 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");
}
}
}
ในตัวอย่างข้างต้น finally block ทำงานเสมอ ไม่ว่าจะมี exception เกิดขึ้นหรือไม่
ผลลัพธ์
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");
}
}
}
ในตัวอย่างข้างต้น finally block จะไม่ execute เนื่องจากเงื่อนไข System.exit(1) ใน try block
ผลลัพธ์
I am in try block