11/08/2018, 19:44

Khối lệnh finally trong java

Khối lệnh try lồng nhau trong java Khối lệnh finally trong java được sử dụng để thực thi các lệnh quan trọng như đóng kết nối, đóng cá stream,… Khối lệnh finally trong java luôn được thực thi cho dù có ngoại lệ xảy ra hay không hoặc gặp lệnh return trong khối ...

Khối lệnh try lồng nhau trong java

Khối lệnh finally trong java được sử dụng để thực thi các lệnh quan trọng như đóng kết nối, đóng cá stream,…

Khối lệnh finally trong java luôn được thực thi cho dù có ngoại lệ xảy ra hay không hoặc gặp lệnh return trong khối try.

Khối lệnh finally trong java được khai báo sau khối lệnh try hoặc sau khối lệnh catch.

flow của khối lệnh finally trong java
Note: Nếu bạn không xử lý ngoại lệ, trước khi kết thúc chương trình, JVM thực thi khối finally (nếu có).

Tại sao phải sử dụng khối finally

Khối finally có thể được sử dụng để chèn lệnh “cleanup” vào chương trình như việc đóng file, đóng các kết nối,…

Cách sử dụng khối finally trong java

Dưới đây là các trường hợp khác nhau về việc sử dụng khối finally trong java.

TH1

sử dụng khối lệnh finally nơi ngoại lệ không xảy ra.

public class TestFinallyBlock {
    public static void main(String args[]) {
        try {
            int data = 25 / 5;
            System.out.println(data);
        } catch (NullPointerException e) {
            System.out.println(e);
        } finally {
            System.out.println("finally block is always executed");
        }
        System.out.println("rest of the code...");
    }
}

Output:

5
finally block is always executed
rest of the code...

TH2

sử dụng khối lệnh finally nơi ngoại lệ xảy ra nhưng không xử lý.

public class TestFinallyBlock1 {
    public static void main(String args[]) {
        try {
            int data = 25 / 0;
            System.out.println(data);
        } catch (NullPointerException e) {
            System.out.println(e);
        } finally {
            System.out.println("finally block is always executed");
        }
        System.out.println("rest of the code...");
    }
}

Output:

finally block is always executed
Exception in thread "main" java.lang.ArithmeticException: / by zero

TH3

sử dụng khối lệnh finally nơi ngoại lệ xảy ra và được xử lý.

public class TestFinallyBlock2 {
    public static void main(String args[]) {
        try {
            int data = 25 / 0;
            System.out.println(data);
        } catch (ArithmeticException e) {
            System.out.println(e);
        } finally {
            System.out.println("finally block is always executed");
        }
        System.out.println("rest of the code...");
    }
}

Output:

java.lang.ArithmeticException: / by zero
finally block is always executed
rest of the code...

TH4

Sử dụng khối lệnh finally trong trường hợp trong khối try có lệnh return.

public class TestFinallyBlock3 {
    public static void main(String args[]) {
        try {
            int data = 25;
            if (data % 2 != 0) {
            	System.out.println(data + " is odd number");
            	return;
            }
        } catch (ArithmeticException e) {
            System.out.println(e);
        } finally {
            System.out.println("finally block is always executed");
        }
        System.out.println("rest of the code...");
    }
}

Output:

25 is odd number
finally block is always executed
Quy tắc: Đối với mỗi khối try, có thể có không hoặc nhiều khối catch, nhưng chỉ có một khối finally.
Note: Khối finally sẽ không được thực thi nếu chương trình bị thoát (bằng cách gọi System.exit() hoặc xảy ra một lỗi không thể tránh khiến chương trình bị chết).
Khối lệnh try lồng nhau trong java
0