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