public class Tank {
static int counter = 0;
int i = counter ++;
boolean full = false;
public Tank(){
System.out.println("Tank"+i+" created");
full = true;
}
public void empty(){
full = false;
}
protected void finalize(){
if(full){
System.out.println("Tank"+i+" must be empty at cleanup");
}
else {
System.out.println("Tank"+i+" cleanedup OK");
}
}
public String toString(){
return "Tank"+i;
}
public static void main(String[] args){
new Tank().empty();
new Tank();
System.gc(); 
}}

解决方案 »

  1.   

    第一次 new Tank().empty();后,full=false。
    第二次 new Tank();后,full=ture,为什么最后输出还有Tank0 cleanedup OK运行后结果Tank0 created
    Tank1 created
    Tank1 must be empty at cleanup
    Tank0 cleanedup OK
      

  2.   

    full不是static的 两个对象的full不一样啊
    true的那个输出Tank1 must be empty at cleanup
    false的那个输出Tank0 cleanedup OK
      

  3.   

    守望者升星了哈,恭喜。
    你说的我知道,System.gc(); 怎么执行的?
    他是逆向全部执行吗?