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