class Tank {
boolean a = true;
Tank() {
a = false;
}
void pd() {
a = true;
}
protected void finalize() {
if(a) {
System.out.println("Error : the tank is full");
}
}
}
public class Test5_11 {
public static void main(String[] args){
Tank b = new Tank();
b.pd();
new Tank();
System.gc();
}
}
大家请看上面这段程序,理论上我调用System.gc()后会到finalize()里面,打印那个错误信息,可是这样写并不能打印出来任何东西,但只要我将
Tank b = new Tank();
b.pd();
这两行改成new Tank().pd();
就可以打印出来错误信息,小弟初学JAVA,不知道这个finalize()具体的用法,望请指教
1 调用System.gc()并不一定进行垃圾回收,只是建议JVM进行垃圾回收
2 对象的finalize() 方法不一定被调用, 在你的实现中,调用了System.gc();
后,系统不一定进行垃圾回收,然后程序退出,就不会调用类的finalize() 方法了
关于finalize() 方法,可以参考"effective java"。
[quote]理论上我调用System.gc()后会到finalize()里面[/quote]
谁告诉你的啊?
调用 System.gc() 只是告诉 JVM 要对其进行回收,但什么时候回收是要 JVM 决定的