【问题标题】:What's the behaviors of fields when finalize an object?最终确定对象时字段的行为是什么?
【发布时间】:2016-10-05 21:43:21
【问题描述】:

例如

class MyClass {
  private MyField1 f1;
  private MyField2 f2;

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

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

【问题讨论】:

  • 关键字finalize你是怎么理解的?

标签: java finalize


【解决方案1】:

不,f1f2 不会自动完成。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2020-10-02
    相关资源
    最近更新 更多