Có, constructors được phép ném exception trong Java.
Một Constructor là loại phương thức đặc biệt được dùng để khởi tạo đối tượng và nó được dùng để tạo đối tượng của một class bằng từ khóa new, nơi đối tượng còn được gọi là Instance của một class. Mỗi đối tượng của một class sẽ có state riêng (Instance variables) và quyền truy cập vào các phương thức của class đó.
Ném Exception từ Constructor
- Một checked exception có thể dùng để chỉ ra vấn đề hợp lệ khi cố tạo instance, trong khi unchecked exception thường chỉ ra bug hoặc trong client code hoặc trong chính constructor.
- Trong cả hai trường hợp, một đối tượng thực sự được cấp phát trong heap space, nhưng tham chiếu đến nó không được trả về. Đối tượng ở trạng thái khởi tạo một phần cho đến khi bị garbage collected. Vì vậy kết luận là lưu tham chiếu đến đối tượng từ chính constructor (bằng cách dùng tham chiếu this) là việc rủi ro, vì chúng ta có thể cho truy cập vào đối tượng ở trạng thái không hợp lệ.
- Một điều quan trọng khác về exception trong constructor liên quan đến reflection. Khi cần invoke empty constructor dùng class object ví dụ test, đôi khi dùng phương thức test.newInstance().
- Bất kỳ exception nào được ném bởi constructors được truyền播出去 mà không thay đổi. Nói cách khác, phương thức newInstance() có thể ném checked exception mà nó thậm chí không khai báo.
Ví dụ
public class ConstructorExceptionTest {
public ConstructorExceptionTest() throws InterruptedException {
System.out.println("Preparing an Object");
Thread.sleep(1000);
System.out.println("Object is ready");
}
public static void main(String args[]) {
try {
ConstructorExceptionTest test = new ConstructorExceptionTest();
} catch (InterruptedException e) {
System.out.println("Got interrupted...");
}
}
}Kết quả
Preparing an Object Object is ready