如果对象的构造函数有异常,是否使用finalize()
清除对象,是否有任何详细信息。
众所周知,定义此方法时不正确。根据手册:
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
我无法以这种方式触发finalize方法。有谁知道构造器无法初始化对象(因此是异常)之后是否要不调用它,或者在某些情况下是否调用了它。
我之所以这样问,是因为我有一个不能清洗两次的物体。我试图了解在引发异常之前清理是否安全,或者是否必须为finalize()
留下标记以有效地跳过并且什么也不做。
最佳答案
我的测试表明它可以
public class Test1 {
Test1() {
throw new RuntimeException();
}
@Override
protected void finalize() throws Throwable {
System.out.println("finalized");
}
public static void main(String[] args) throws Exception {
try {
new Test1();
} catch (RuntimeException e) {
e.printStackTrace();
}
System.gc();
Thread.sleep(1000);
}
}
版画
java.lang.RuntimeException
at test.Test1.<init>(Test1.java:13)
at test.Test1.main(Test1.java:24)
finalized
它在Java HostSpot客户端VM 1.7.0_03上
关于java - 构造函数抛出异常后可以调用finalize吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14483279/