1、
finalize不会被调用
public class FinalizeMethod {
public FinalizeMethod() {
System.gc();
}
public void finalize() {
System.out.println("after System.gc() is called");
}
public static void main(String[] args) {
FinalizeMethod d = new FinalizeMethod();
}
}
解析:
FinalizeMethod d=new FinalizeMethod();
被执行的时候,构建器中调用了gc(),但这时对象有变量d引用,不是垃圾,所以该对象不会被回收,当然该对象的fianlize方法不会被调用了。
2、finalize会被调用
public class FinalizeMethod {
public FinalizeMethod() {
System.gc();
}
public void finalize() {
System.out.println("after System.gc() is called");
}
public static void main(String[] args) {
FinalizeMethod d = new FinalizeMethod();
d = null;//强制使d成为GC对象
System.gc();
}
}
解析:
强制d可以被GC后,调用System.gc()就可以看到finalize()方法被调用了。
注意,如果不加上最后一个System.gc()也是无法看到被调用