Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Finally Block ใน Java ทำงานเสมอหรือไม่?

ใช่ 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