Computer >> Máy Tính >  >> Lập trình >> Java

Một phương thức khởi tạo có thể ném một ngoại lệ trong Java không?

Có, hàm tạo được phép đưa ra một ngoại lệ trong Java.

A Khối mã lệnh là một loại phương thức đặc biệt được sử dụng để khởi tạo đối tượng và nó được sử dụng để tạo một đối tượng của một lớp bằng cách sử dụng từ khóa mới , trong đó một đối tượng còn được gọi là I nstance của một lớp. Mỗi đối tượng của một lớp sẽ có trạng thái riêng ( Các biến phiên bản ) và quyền truy cập vào các phương thức của lớp nó.

Ném một ngoại lệ từ một hàm tạo

  • Một ngoại lệ đã chọn có thể được sử dụng để chỉ ra một vấn đề hợp pháp khi cố gắng tạo một phiên bản, trong khi một ngoại lệ không được kiểm tra thường chỉ ra một lỗi trong mã máy khách hoặc trong chính hàm tạo.
  • Trong cả hai trường hợp, một đối tượng thực sự được phân bổ trong không gian đống , nhưng một tham chiếu đến nó không được trả về. Đối tượng vẫn ở trạng thái khởi tạo một phần cho đến khi nó được thu thập rác. Vì vậy, chúng tôi kết luận rằng lưu một tham chiếu đến đối tượng từ chính phương thức khởi tạo (bằng cách sử dụng this tham chiếu) là một điều rủi ro, vì chúng tôi có thể cấp quyền truy cập vào một đối tượng ở trạng thái không hợp lệ.
  • Một điều quan trọng khác cần lưu ý về ngoại lệ trong một hàm tạo có liên quan đến sự phản chiếu . Khi chúng ta cần gọi hàm tạo trống bằng cách sử dụng một đối tượng lớp chẳng hạn như test , đôi khi chúng tôi sử dụng phương thức test.newInstance ().
  • Mọi ngoại lệ do các hàm tạo ném ra sẽ được truyền mà không có sự thay đổi. Nói cách khác, newInstance () phương thức có thể ném ngoại lệ đã kiểm tra 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...");
      }
   }
}

Đầu ra

Preparing an Object
Object is ready