Đa khối lệnh catch trong Java

0 phút đọc

Trong Java, khi bạn cần thực hiện các tác vụ khác nhau mà ở đó có thể xảy ra các ngoại lệ khác nhau, bạn có thể sử dụng đa khối lệnh catch. Điều này cho phép bạn xử lý từng loại ngoại lệ một, giúp tăng tính linh hoạt và kiểm soát trong việc xử lý ngoại lệ.

Cú Pháp của Đa Khối Lệnh Catch

Cú pháp cơ bản của đa khối lệnh catch trong Java như sau:

try {
   // Mã lệnh bảo vệ
} catch (ExceptionType1 e1) {
   // Xử lý ngoại lệ kiểu 1
} catch (ExceptionType2 e2) {
   // Xử lý ngoại lệ kiểu 2
} catch (ExceptionType3 e3) {
   // Xử lý ngoại lệ kiểu 3
}

Khi sử dụng đa khối lệnh catch, các khối catch sẽ được kiểm tra tuần tự. Khối catch đầu tiên mà phù hợp với ngoại lệ được ném ra sẽ được thực thi, và các khối catch sau đó sẽ bị bỏ qua.

Ví dụ Sử Dụng Đa Khối Lệnh Catch trong Java

Dưới đây là một ví dụ minh họa:

public class TestMultipleCatchBlock {

    public static void main(String args[]) {
        try {
            int a[] = new int[5];
            a[5] = 30 / 0; // Sẽ ném ra ArithmeticException
        } catch (ArithmeticException e) {
            System.out.println("task1 is completed");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("task2 is completed");
        } catch (Exception e) {
            System.out.println("common task completed");
        }

        System.out.println("rest of the code...");
    }
}

Kết quả

task1 is completed
rest of the code...

Trong ví dụ trên, khi chúng ta chia một số cho 0, ngoại lệ ArithmeticException được ném ra và khối catch thứ nhất phù hợp với ngoại lệ này, vì vậy "task1 is completed" được in ra. Các khối catch sau đó không được thực thi.

Tuy nhiên, khi sử dụng đa khối lệnh catch, bạn cần lưu ý rằng các khối catch phải được sắp xếp từ loại ngoại lệ cụ thể đến loại ngoại lệ chung. Nếu bạn đặt khối catch cho Exception ở đầu, các khối catch cụ thể sẽ không bao giờ được thực thi, như ví dụ sau:

public class TestMultipleCatchBlock1 {

    public static void main(String args[]) {
        try {
            int a[] = new int[5];
            a[5] = 30 / 0; // Sẽ ném ra ArithmeticException
        } catch (Exception e) {
            System.out.println("common task completed");
        } catch (ArithmeticException e) {
            System.out.println("task1 is completed");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("task2 is completed");
        }
        System.out.println("rest of the code...");
    }
}

Kết quả

Compile-time error

Chương trình trên bị lỗi tại compile-time vì các khối lệnh catch (ArithmeticException e)catch (ArrayIndexOutOfBoundsException e) sẽ không bao giờ được thực thi khi đã có một khối catch (Exception e) bắt tất cả các ngoại lệ.

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Avatar TechMely Team
Được viết bởi

TechMely Team

Cuộc sống không phải là phim ảnh, không có nhiều đến thế... những lần không hẹn mà gặp.