【问题标题】:The method finalize() from the type Object is not visible?Object 类型的 finalize() 方法不可见?
【发布时间】:2014-03-01 17:22:52
【问题描述】:

我在我编写的一个类的 main 方法中尝试了以下代码:

public static void main(String[] args){
    ...
    Object s = new Object();
    s.finalize();
    ...
}

不过,日食给了我一个提示

The method finalize() from the type Object is not visible

我很困惑,因为 Object 类型有一个受保护的最终方法,它应该是自己可见的?反正我错了吗?

【问题讨论】:

  • 不可见是什么意思??
  • Protected 是私有的,可以从子类访问。不是由用户。
  • 你不需要调用 finalize() java 会自动完成
  • Object.finalize() 默认为空,并且仅应在完成线程的垃圾回收之后调用,如果有的话。

标签: java finalize


【解决方案1】:

Object#finalize() 是一个protected 方法。你不能这样称呼它。类的protected 成员由其直接子类继承。您可以在 this 引用上的直接子类中访问它,但不能直接使用该类的引用。

应该是这样的:

class Demo {
    public void test() { 
        this.finalize();
    } 
}

顺便说一句,你为什么要调用它?该方法由 JVM 自动调用以清除对象正在使用的任何资源,就在对象完全从内存中删除之前。

【讨论】:

  • Object类的finalize方法也是空的
  • 谢谢!我只是想测试一下,没有具体使用那个方法。
【解决方案2】:

finalize() 方法在对象即将被销毁时调用。

如果你有一个自定义类,那么你可以override这个方法来做一些事情。
您不应该直接调用此方法。 JVM 的垃圾收集器会自动为您完成这项工作。
而且您不应该依赖finalize() 方法来清除任何资源,因为它可能永远不会在您的程序执行期间发生。

【讨论】:

    【解决方案3】:

    protected 表示只有在与 Object 位于同一包中时才能访问该方法。并且对象在包中:java.lang.Object 你的程序在包中 com.yourpackage.something ==> 你不能从你的包中访问它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2022-10-30
      相关资源
      最近更新 更多