如果对象的构造函数有异常,是否使用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/

10-10 17:10