finally

finally เกี่ยวข้องกับการจัดการความผิดปกติ (exception handling) ใช้ร่วมกับ try-catch

คำสั่งในบล็อค finally จะถูกเรียกขึ้นมาประมวลผลเสมอ ไม่ว่าจะเกิด exception หรือไม่ก็ตาม

public class Test {
    public static void main(String[] args) {
        System.out.println("begin");
        try {
            System.out.println("try");
            int i = 1 / 0;  // exception occurs here
            System.out.println("end try");
        } catch (Exception ex) {
            System.out.println("catch");
        } finally {
            System.out.println("finally");
        }
        System.out.println("end");
    }
}

ผลการทำงานคือ

begin
try
catch
finally
end

บางคนอาจจะสงสัยว่าจำเป็นด้วยหรือที่ต้องมี finally เพราะในกรณีที่ไม่มี finally เมื่อโปรแกรมทำงานคำสั่งใน try-catch จบ ก็ต้องประมวลผลคำสั่งที่อยู่ถัดจาก try-catch อยู่ดี

แต่ความแตกต่างอยู่ที่คำสั่งใน finally จะถูกเรียกมาทำเสมอ แม้ว่าโค้ดใน try-catch จะมีคำสั่ง return, continue, หรือ break ก็ตาม

finally กับ return

public class Test {
    public static void main(String[] args) {
        System.out.println("begin");
        try {
            System.out.println("try");
            int i = 10;
            if (i > 0)
                return;
            System.out.println("end try");
        } catch (Exception ex) {
            System.out.println("catch");
        } finally {
            System.out.println("finally");
        }
        System.out.println("end");
    }
}

ผลการทำงานคือ

begin
try
finally

finally กับ break

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("begin");
            try {
                System.out.println("try");
                if (i == 0) {
                    break;
                }
                System.out.println("end try");
            } catch (Exception ex) {
                System.out.println("catch");
            } finally {
                System.out.println("finally");
            }
            System.out.println("end");
        }
    }
}

ผลการทำงานคือ

begin
try
finally

finally กับ continue

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 2; i++) {
            System.out.println("begin");
            try {
                System.out.println("try");
                if (i == 0) {
                    continue;
                }
                System.out.println("end try");
            } catch (Exception ex) {
                System.out.println("catch");
            } finally {
                System.out.println("finally");
            }
            System.out.println("end");
        }
    }
}

ผลการทำงานคือ

begin
try
finally
begin
try
end try
finally
end

ในรอบแรกของการวนลูป เงื่อนไขที่จะ continue เป็นจริง รอบแรกจึงพิมพ์ begin, try, finally (3 บรรทัดแรกของผลลัพธ์) แต่ไม่พิมพ์ end ซึ่งเป็นความแตกต่างของการวางโค้ดไว้ข้างหลัง try-catch กับการวางโค้ดไว้ใน finally

รอบที่สองของวนลูป เงื่อนไขที่จะ continue เป็นจริง รอบนี้จึงพิมพ์ try, end try, finally, end

ตัวอย่างการใช้ finally เพื่อใส่โค้ดที่คืนทรัพยากร

เขียนโปรแกรม Java เบื้องต้น

หนังสือ Java Keywords

หากจะนำข้อความไปใช้ ต้องแสดงที่มา และห้ามใช้ในเชิงพาณิชย์

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s