finalize()方法负责一些清理工作。
应用场合:
垃圾回收器只能释放哪些经由new释放的内存,假定对象(并非使用new)获得了一块“特殊”的内存区域,垃圾回收器无法回收,为了应对这种情况,java允许在类中定义一个名为finalize()的方法。
工作原理:
一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
特点:
finalize()在Object类中定义,我们可以重新finalize()方法,垃圾回收器会自动调用
终结条件:
定义:可以在finalize()内部加入判断条件,当符合条件时再进行其中的清理工作。
例:
class Book extends Object{
boolean cheakedOut = false;
Book(boolean cheakedOut){
cheakedOut = cheakedOut;
}
void checkIn(){
cheakedOut = false;
}
protected void finalize(){
if(cheakedOut)//终结条件
System.out.println("Error:cheackedOut");
}
}
public class tt{
public static void main(String[] args) {
Book novel = new Book(true);
novel.checkIn();
Book novel2 = new Book(true);
novel2.checkIn();
System.gc();
}
}
注意: