Java 中的构造函数可以抛出异常吗?

javaobject oriented programmingprogramming

是的,Java 中允许构造函数抛出异常。

构造函数是一种特殊类型的方法,用于初始化对象,并使用new 关键字创建类的对象,其中对象也称为类的实例。类的每个对象都有自己的状态(实例变量)并可以访问其类的方法。

从构造函数中抛出异常

  • 在尝试创建实例时,可以使用已检查异常来指示合法问题,而未检查异常通常表示客户端代码或构造函数本身中的错误。
  • 在这两种情况下,对象实际上都分配在堆空间中,但不会返回对它的引用。对象将保持部分初始化状态,直到被垃圾回收。因此我们得出结论,从构造函数本身保存对对象的引用(通过使用 this reference)是一件危险的事情,因为我们可能会授予对处于无效状态的对象访问权限。
  • 关于构造函数中的异常,另一个需要注意的重要事项与反射有关。当我们需要使用类对象(例如 test)调用空构造函数时,我们有时会使用方法 test.newInstance()。
  • 构造函数抛出的任何异常都会在不发生任何变化的情况下传播。换句话说,newInstance() 方法可能会抛出它甚至没有声明的已检查异常

示例

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...");
      }
   }
}

输出

Preparing an Object
Object is ready

相关文章