Java Finally Block là gì? (What is Java Finally Black?).






Bài viết này chúng ta sẽ tìm hiểu về khối Finally(Finally Block) và tác dụng của nó trong ngôn ngữ lập trình Java.






Khối Finally luôn được thực thi ngay sau khi khối Try-Catch được thực thi xong.

Khối Finally thì luôn được thực thi ngay cả trong trường hơp không xảy ra các exception(ngoại lệ).
Chức năng chính của khối Finally dùng để làm sạch mã code.

Giữ mã code được sạch thì luôn là một thói quen tốt, even when không có bất kỳ exceptions(ngoại lệ) nào xảy ra.

Chỗ này bạn có thể hiểu thông qua trường hợp khi bạn tạo ra các biến tạm và khi xử lý bạn muốn remove các biến này khỏi vùng nhớ, nhưng trong trường hợp xảy ra các ngoại lệ thì các lệnh remove này sẽ không được thực thi hoặc nếu muốn thực thì bạn phải viết double lệnh, 1 trong khối Catch và một ngoài khối Try-Catch, vì vậy nếu dùng khối Finally thì công việc sẽ đơn giản hơn vì bất kể xảy ra ngoại lệ hay không thì các lệnh trong khối Finally sẽ luôn được thực thi.

Hệ thông thực thi thì luôn thực thi code trong khối Finally bất kể có vấn đề gì phát sinh trong khối Try-Catch. Nó là nơi lý tưởng để làm sạch code(cleanup code).

Ta sẽ đi qua một ví dụ đơn giản để hiểu rõ hơn về khối Finally.

/**
 * @(#)JavaFinallyBlock.java
 *
 * JavaFinallyBlock application
 *
 * @author BUI NGOC SON
 * @version 1.00 2014/2/7
 */

public class JavaFinallyBlock {
   
    public static void main(String[] args) {
       
        System.out.println("-- Case 1 ------------------");
        /**
         * Ngoại lện sẽ xảy ra ở đây, và sau khi khối
         * Catch được thực thi xong thì ứng dụng sẽ
         * được chuyển tới khối Finally
         */
        /**
         * Exception will occur here, and after Catch block
         * the application will goto finally block.
         */
        try{
            int i = 9/0;
        } catch(Exception ex){
            System.out.println("Inside 1st catch Block");
        } finally {
            System.out.println("Inside 1st finally block");
        }
       
        System.out.println("\n-- Case 2 ------------------");
        /**
         * Trong trường này ngoại lệ sẽ không xảy ra,
         * sau khi khối Try được thực xong thì ứng dụng
         * sẽ chuyển tới khối Finally.
         */
        /**
         * In this case exception won't, after executing try block
         * the application will goto finally block.
         */
        try{
            int i = 9/9;
        } catch(Exception ex){
            System.out.println("Inside 2nd catch Block");
        } finally {
            System.out.println("Inside 2nd finally block");
        }
       
        System.out.println("\n \n \t -- vnlives.net --");
       
    }
}

Sau khi chạy bạn sẽ thấy kết quả như bên dưới, ta thấy mã lệnh trong khối Finally luôn được thực thi.

















No comments:

Post a Comment