目录
定义
通俗解释:当垃圾回收器要回收一个对象(具体的对象)时,就会先调用finalize方法,此方法在实际工作中基本不会用到,但是面试的时候会问
举例说明
代码
package com.hspedu.object_;
public class Finalize_ {
public static void main(String[] args) {
Car bmw = new Car("BMW");
//断掉对象引用和对象之间的连接
//上述Car类对象(具体的对象)变成了一个垃圾
//垃圾回收器就会回收(销毁)对象,在销毁对象前,会调用该对象的finalize方法
//程序员就可以在 finalize中,写自己的业务逻辑代码(比如释放资源:数据库连接,或者打开文件..)
//如果程序员不重写 finalize,那么就会调用Object类的finalize,即默认处理
//如果程序员重写了 finalize, 就可以实现自己的逻辑
bmw = null;
System.out.println("退出程序...");
}
}
class Car {
private String name;
public Car(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
System.out.println("我们销毁汽车" + name);
System.out.println("释放了一些资源...");
}
}
在子类中重写了finalize方法,但是运行后发现并没有输出
原因:垃圾回收机制的调用,是由系统来决定(即有自己的GC算法)
解决方法:通过System.gc()主动触发垃圾回收机制(也不是100%能成功)
package com.hspedu.object_;
public class Finalize_ {
public static void main(String[] args) {
Car bmw = new Car("BMW");
bmw = null;
System.gc();
System.out.println("退出程序...");
}
}
class Car {
private String name;
public Car(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
System.out.println("我们销毁汽车" + name);
System.out.println("释放了一些资源...");
}
}
会先输出"退出程序...",然后再输出finalize方法中的语句
本次运行没有触发垃圾回收机制