finalize 方法
说明:实际开发中很少或者几乎不会重写finalize
方法,更多的是应对面试考点
说明
(1)当对象被回收时,系统会自动调用该对象的 finalize
方法。子类可以重写该方法,做一些额外的资源释放操作(必然:释放资源,数据库连接,或者打开文件...)
(2)什么时被回收:当一个对象没有任何引用时,则 JVM 认为该对象不再是一个可达对象。该对象将被垃圾回收器回收,在回收对象时,会调用 finalize
方法。
(3)对象回收机制的调用,是在系统决定对象已没有引用后自动完成的。通过调用 System.gc()
主动触发垃圾回收机制。
补充说明:如果当对象没有被引用时就判断,然后回收,效率太低,系统底层由特定的方法判断是否回收,所以需要手动触发回收机制
finalize
方法重写示例
java
public class finalize {
public static void main(String[] args) {
finals finals = new finals(18);
finals = null;
System.gc();
}
}
class finals{
int age;
public finals(){
}
public finals(int age) {
this.age = age;
}
@Override
protected void finalize() throws Throwable {
System.out.println("调用finalize回收对象");
}
}
// 输出
调用finalize回收对象