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