运维开发网

可以在Java中重载finalize()方法

运维开发网 https://www.qedev.com 2020-03-27 08:56 出处:网络 作者:运维开发网整理
我已经读过某个方法,每个方法都可以重载. finalize() 当然是一种方法.但在搜索时我也发现你不能重载这个方法. 所以问题是我们可以重载finalize()方法吗?如果是,那么它是如何实施的? 你可以重载finalize方法,这将成功编译: public class Test { public void finalize(String hi) { System
我已经读过某个方法,每个方法都可以重载.

finalize()

当然是一种方法.但在搜索时我也发现你不能重载这个方法.

所以问题是我们可以重载finalize()方法吗?如果是,那么它是如何实施的?

你可以重载finalize方法,这将成功编译:

public class Test
{
    public void finalize(String hi)
    {
        System.out.println("test");
    }
}

但是垃圾收集器和JVM不会调用它,因为它将调用没有参数的那个.

GC和JVM将始终使用签名调用finalize

protected void finalize() throws Throwable

解决方法

您可以简单地覆盖finalize并使用参数调用方法:

public class Test
{
    public static void main(String args[])
    {
        new Test();
        System.gc();
    }

    @Override
    public void finalize() throws Throwable
    {
        super.finalize();
        this.finalize("allo");
    }

    public void finalize(String hi)
    {
        System.out.println(hi);
    }
}

这将打印allo.这样你可以在你想要的地方调用finalize(String hi),当你覆盖finalize()调用它时,GC也会调用它.

0

精彩评论

暂无评论...
验证码 换一张
取 消