来自Object类型的方法finalize()是不可见的?

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

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

然而,日食给了我一个提示

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

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

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

它会是这样的:

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

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

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

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

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