完成对象时字段的行为是什么?

What's the behaviors of fields when finalize an object?

例如

class MyClass {
  private MyField1 f1;
  private MyField2 f2;

  @override
  protected void finalize() throws Throwable {
    System.out.println("MyClass finalized.");
  }
}

MyClass的实例完成时,f1f2是否也完成了? 如果MyField1MyField2也有终结器,它们之间的执行顺序是什么?

不,f1f2 不会自动完成。

它们很可能指的是可以与 MyClass 的实例同时安排进行垃圾回收的对象,假设没有其他对象指的是 f1f2 正在引用。

向 class 添加显式终结器可能会干扰 JVM 的工作,除非您采用以下习惯用法:

protected void finalize() throws Throwable {
    try {
        /*your finalize code*/
    } finally {
        super.finalize();
    }
}