Java中的 finalize() 方法以及如何覆盖它?
Object 类的Java finalize() 方法是垃圾收集器总是在删除/销毁有资格让垃圾收集执行清理活动的对象之前调用的方法。清理活动意味着关闭与该对象关联的资源,例如数据库连接、网络连接,或者我们可以说资源取消分配。请记住,它不是保留关键字。一旦 finalize() 方法立即完成,垃圾收集器就会销毁该对象。
终结:就在销毁任何对象之前,垃圾收集器总是调用 finalize() 方法对该对象执行清理活动。这个过程在Java中称为 Finalization。
Note: The Garbage collector calls the finalize() method only once on any object.
句法:
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