57.Khối finally trong lập trình java

Trong lập trình Java, khối “finally” là một phần tùy chọn của cơ chế “try-catch-finally”. Khối “finally” chứa mã sẽ được thực thi bất kể có ngoại lệ xảy ra hay không trong khối “try”. Điều này đảm bảo rằng mã trong khối “finally” luôn được thực hiện sau khi kết thúc khối “try” và/hoặc khối “catch”, ngay cả khi có ngoại lệ xảy ra.

Cú pháp của cơ chế “try-catch-finally” như sau:

java
try {
    // Mã có khả năng gây ra ngoại lệ
} catch (ExceptionType1 e1) {
    // Xử lý ngoại lệ loại 1 (ExceptionType1)
} catch (ExceptionType2 e2) {
    // Xử lý ngoại lệ loại 2 (ExceptionType2)
} finally {
    // Mã trong khối finally được thực thi dù có ngoại lệ xảy ra hay không
    // Thường được sử dụng để giải phóng tài nguyên, đóng kết nối, ...
}

Các điểm chính liên quan đến khối “finally”:

  1. Khối “finally” là tùy chọn: Bạn có thể có một khối “try-catch” mà không có khối “finally”. Trong trường hợp này, nếu không có ngoại lệ xảy ra, mã trong khối “try” sẽ được thực thi và chương trình sẽ tiếp tục thực thi các lệnh tiếp theo sau khối “finally”. Nếu có ngoại lệ xảy ra và nó được bắt bởi một khối “catch”, thì sau khi mã trong khối “catch” được thực thi, chương trình sẽ tiếp tục thực hiện mã trong khối “finally”.
  2. Thứ tự thực thi: Khối “finally” được thực thi sau khi mã trong khối “try” và/hoặc khối “catch” được thực hiện. Dù có ngoại lệ hay không, khối “finally” luôn được thực thi trước khi chương trình thoát khỏi cơ chế “try-catch-finally”.
  3. Mục đích sử dụng: Khối “finally” thường được sử dụng để thực hiện những công việc cần thiết sau khi xử lý ngoại lệ hoặc để giải phóng tài nguyên đã được cấp phát trong khối “try”. Ví dụ, đóng kết nối tới cơ sở dữ liệu, đóng luồng dữ liệu, giải phóng bộ nhớ, …

Dưới đây là một ví dụ minh họa về cơ chế “try-catch-finally”:

java
public class FinallyExample {
    public static void main(String[] args) {
        try {
            int result = divideNumbers(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
        } finally {
            System.out.println("Finally block always executed.");
        }
    }

    public static int divideNumbers(int a, int b) {
        return a / b;
    }
}

Trong ví dụ trên, khi chúng ta chia số 10 cho 0, một ngoại lệ ArithmeticException sẽ xảy ra. Mã trong khối “catch” sẽ được thực thi để xử lý ngoại lệ và sau đó, mã trong khối “finally” sẽ được thực thi, bất kể có ngoại lệ hay không.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top