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

原文:https://www . geesforgeks . org/finalize-method-in-Java-and-how-override-it/

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

语法:

protected void finalize throws Throwable{}

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

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

如何覆盖 finalize()方法?

现在对象类中存在的 finalize 方法有一个空实现,在我们的类清理活动中有,那么我们必须覆盖这个方法来定义我们自己的清理活动。

为了覆盖这个方法,我们必须在代码中显式定义和调用 finalize。

// 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();
    }
}

Output:

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