Xem thêm

Cách sử dụng từ khóa Throws trong Java (và khi nào sử dụng Throw)

Huy Erick
Trong Java, cả throw và throws là các khái niệm liên quan đến xử lý ngoại lệ. Từ khóa throws được sử dụng để khai báo các ngoại lệ có thể được ném ra từ...

Trong Java, cả throw và throws là các khái niệm liên quan đến xử lý ngoại lệ. Từ khóa throws được sử dụng để khai báo các ngoại lệ có thể được ném ra từ một phương thức, trong khi từ khóa throw được sử dụng để tường minh ném một ngoại lệ trong một phương thức hoặc khối mã.

Từ khóa throws trong Java

Từ khóa throws trong Java được sử dụng để khai báo các ngoại lệ có thể xảy ra trong quá trình thực thi chương trình. Đối với bất kỳ phương thức nào có thể ném ra ngoại lệ, việc sử dụng từ khóa throws là bắt buộc để liệt kê các ngoại lệ có thể được ném ra. Từ khóa throws cung cấp thông tin về các ngoại lệ cho người lập trình cũng như người gọi phương thức ném ra các ngoại lệ này.

Từ khóa throws cho phép ngoại lệ được truyền dọc theo ngăn xếp gọi. Khi một phương thức khai báo rằng nó ném ra một ngoại lệ, không cần phải xử lý ngoại lệ đó. Người gọi của một phương thức ném ra ngoại lệ được yêu cầu xử lý ngoại lệ (hoặc ném nó cho người gọi của mình và cứ tiếp tục như vậy) để duy trì luồng của chương trình.

Chỉ các ngoại lệ kiểm tra mới yêu cầu được ném ra bằng cách sử dụng từ khóa throws. Các ngoại lệ không kiểm tra không cần phải được ném ra hoặc xử lý một cách rõ ràng trong mã.

Ví dụ về từ khóa throws trong Java

Dưới đây là một ví dụ về một phương thức ném ra một ngoại lệ, được xử lý bởi người gọi của phương thức:

public static void writeToFile() throws IOException {
    BufferedWriter bw = new BufferedWriter(new FileWriter("myFile.txt"));
    bw.write("Test");
    bw.close();
}

public static void main(String[] args) {
    try {
        writeToFile();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

Trong ví dụ trên, phương thức "writeToFile" ném ra một IOException và khai báo nó bằng từ khóa throws cho người gọi của phương thức. Phương thức "main" gọi phương thức "writeToFile" và xử lý ngoại lệ trong một khối try-catch, sau đó in ra ngăn xếp ngoại lệ lên console.

Cú pháp của từ khóa throws trong Java

Cú pháp của từ khóa throws trong Java như sau:

kiểu phương thức (tham số) throws Ngoại_lệ1, Ngoại_lệ2, ...

Như đã thấy trong cú pháp trên, tất cả các ngoại lệ có thể được ném ra từ một phương thức cần được khai báo trong chữ ký phương thức bằng từ khóa throws. Một phương thức có thể ném ra nhiều ngoại lệ, mỗi ngoại lệ được phân tách bằng dấu phẩy trong khai báo.

Từ khóa throw trong Java

Từ khóa throw trong Java được sử dụng để tường minh ném một ngoại lệ duy nhất. Điều này có thể là từ bên trong một phương thức hoặc bất kỳ khối mã nào. Cả ngoại lệ kiểm tra và không kiểm tra đều có thể được ném ra bằng từ khóa throw.

Khi một ngoại lệ được ném ra bằng từ khóa throw, luồng thực thi của chương trình được dừng lại và điều khiển được chuyển đến khối try-catch gần nhất mà phù hợp với loại ngoại lệ được ném ra. Nếu không tìm thấy sự phù hợp như vậy, trình xử lý ngoại lệ mặc định sẽ chấm dứt chương trình.

Từ khóa throw hữu ích để ném ngoại lệ dựa trên một số điều kiện cụ thể, ví dụ: nếu người dùng nhập dữ liệu không chính xác. Nó cũng hữu ích để ném các ngoại lệ tùy chỉnh cụ thể cho một chương trình hoặc ứng dụng.

Các ngoại lệ không kiểm tra có thể được truyền qua ngăn xếp gọi bằng cách sử dụng từ khóa throw trong một phương thức. Các ngoại lệ kiểm tra có thể được truyền bằng cách sử dụng từ khóa throw khi phương thức ném ra ngoại lệ đó khai báo bằng từ khóa throws.

Cú pháp của từ khóa throw trong Java

Cú pháp của từ khóa throw trong Java như sau:

throw đối_tượng_nguyên_nhân;

Một đối tượng nguyên_nhân có thể là một thể hiện hoặc lớp con của lớp Throwable. Tất cả các ngoại lệ được định nghĩa trong Java đều là các lớp con của Throwable.

Ví dụ về từ khóa throw trong Java

private static List integers = new ArrayList();

public static void addInteger(Integer value) throws IllegalArgumentException {
    if (integers.contains(value)) {
        throw new IllegalArgumentException("Integer already added.");
    }
    integers.add(value);
}

public static void main(String[] args) {
    try {
        addInteger(1);
    } catch (IllegalArgumentException iae) {
        iae.printStackTrace();
    }
}

Trong ví dụ trên, phương thức "addInteger" ném ra một IllegalArgumentException nếu đối tượng ArrayList "integers" đã chứa số nguyên được truyền vào. Vì IllegalArgumentException là một ngoại lệ kiểm tra, nó phải được xử lý bên trong phương thức "addInteger" hoặc người gọi của nó. Trong ví dụ này, phương thức "addInteger" không xử lý ngoại lệ và ném nó cho người gọi bằng từ khóa throws.

Do đó, người gọi, tức là "main", phải xử lý IllegalArgumentException bằng một khối try-catch.

Từ khóa Throw vs Throws trong Java

Bảng dưới đây liệt kê sự khác biệt giữa từ khóa throw và throws trong Java:

Throw Throws
Được sử dụng trong một phương thức (hoặc constructor) Được sử dụng với chữ ký phương thức (hoặc constructor)
Được sử dụng để tường minh ném một ngoại lệ Được sử dụng để khai báo ngoại lệ
Chỉ có thể ném một ngoại lệ duy nhất Có thể khai báo nhiều ngoại lệ
Được theo sau bởi một đối tượng nguyên nhân Được theo sau bởi tên lớp ngoại lệ
Không thể được sử dụng để truyền ngoại lệ kiểm tra theo mặc định Có thể được sử dụng để truyền ngoại lệ kiểm tra theo mặc định

Theo dõi, phân tích và quản lý lỗi với Rollbar

Rollbar in action

Quản lý lỗi và ngoại lệ trong mã của bạn là một thách thức. Nó có thể khiến việc triển khai mã sản xuất trở thành một trải nghiệm không dễ chịu. Rollbar có thể giúp bạn ném ngoại lệ Java cũng như theo dõi, phân tích và quản lý lỗi trong thời gian thực để giúp bạn tiến xa hơn với sự tự tin hơn. Hãy thử ngay hôm nay!

1