public class Temp {
//判断标记
boolean checked = false;
public Temp(boolean checked) {
super();
this.checked = checked;
}
void checkInfo(){
checked = false;
}
protected void finalize(){
if(checked){
System.out.println("Error:checked null");
}else{
try {
//正常时调用基类finalize();
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象,调用checkInfo方法
Temp temp = new Temp(true);
temp.checkInfo();
new Temp(true);
//强制执行垃圾回收器
System.gc();
}
}
我用了finalize()的方法来回收垃圾对象,因为在程序运行完毕后一些对象就变成了垃圾,java并不会马上采用回收机制将这些对象回收,这时我用到了finalize提示让虚拟机立即回收这些垃圾,清理了内容,创建Temp对象调用了checkInfo方法由于程序错误并未执行,并由system.gc强制终止执行垃圾回收器,而第二个对象传入的是真执行了if语句调用了父类finalize方法执行了输出语句 |