finalize()
如果对象的构造函数出现异常,是否有任何关于是否清理对象的详细信息。
众所周知,何时调用此方法时定义不正确。根据手册:
Java 编程语言不保证哪个线程将为任何给定对象调用 finalize 方法。但是,可以保证调用 finalize 的线程在调用 finalize 时不会持有任何用户可见的同步锁。如果 finalize 方法抛出未捕获的异常,则忽略该异常并终止该对象的终结。
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
我无法以这种方式触发 finalize 方法。有谁知道它是否被保证不被调用,或者在某些情况下在构造函数初始化对象失败后调用它(这是一个异常)。
我问这个是因为我有一个不能清理两次的物体。我试图了解在抛出异常之前清理是否安全,或者我是否必须留下一个标记finalize()
才能有效地跳过并且什么也不做。