📜  Java中的 finalize() 方法以及如何覆盖它?

📅  最后修改于: 2022-05-13 01:54:21.929000             🧑  作者: Mango

Java中的 finalize() 方法以及如何覆盖它?

Object 类的Java finalize() 方法是垃圾收集器总是在删除/销毁有资格让垃圾收集执行清理活动的对象之前调用的方法。清理活动意味着关闭与该对象关联的资源,例如数据库连接、网络连接,或者我们可以说资源取消分配。请记住,它不是保留关键字。一旦 finalize() 方法立即完成,垃圾收集器就会销毁该对象。

终结就在销毁任何对象之前,垃圾收集器总是调用 finalize() 方法对该对象执行清理活动。这个过程在Java中称为 Finalization。

句法:

protected void finalize throws Throwable{}

由于 Object 类包含 finalize 方法,因此 finalize 方法可用于每个Java类,因为 Object 是所有Java类的超类。由于它适用于每个Java类,因此垃圾收集器可以在任何Java对象上调用 finalize() 方法。

为什么使用 finalize() 方法?

finalize() 方法在垃圾收集器为特定对象运行之前释放系统资源。 JVM 允许每个对象只调用一次 finalize()。

如何覆盖 finalize() 方法?

Object 类中的 finalize 方法有一个空实现。在我们班,有清洁活动。然后我们必须重写这个方法来定义我们的清理活动。

为了重写这个方法,我们必须在我们的代码中明确定义和调用 finalize。

Java
// Java code to show the
// overriding of finalize() method
 
import java.lang.*;
 
// Defining a class demo since every java class
// is a subclass of predefined Object class
// Therefore demo is a subclass of Object class
public class demo {
 
    protected void finalize() throws Throwable
    {
        try {
 
            System.out.println("inside demo's finalize()");
        }
        catch (Throwable e) {
 
            throw e;
        }
        finally {
 
            System.out.println("Calling finalize method"
                               + " of the Object class");
 
            // Calling finalize() of Object class
            super.finalize();
        }
    }
 
    // Driver code
    public static void main(String[] args) throws Throwable
    {
 
        // Creating demo's object
        demo d = new demo();
 
        // Calling finalize of demo
        d.finalize();
    }
}


输出:

inside demo's finalize()
Calling finalize method of the Object class