public class Tank {
private String state;
public void fullFill(){
state="full";
}
public void empty(){
state="empty";
}
public void finalize(){
if(state.equals("full"))
System.out.println("Error: "+state);
}
public static void main(String[] args){
new Tank().fullFill();
new Tank().empty();
System.gc();
}
}
此时运行结果为输出Error: full
若把main方法改为:
public static void main(String[] args){
Tank t1=new Tank();
t1.fullFill();
Tank t2=new Tank();
t2.empty();
System.gc();
}则运行结果什么也不会输出,为什么两种情况会不一样呢,在垃圾回收之前不是先会调用finalize方法么?
private String state;
public void fullFill(){
state="full";
}
public void empty(){
state="empty";
}
public void finalize(){
if(state.equals("full"))
System.out.println("Error: "+state);
}
public static void main(String[] args){
new Tank().fullFill();
new Tank().empty();
System.gc();
}
}
此时运行结果为输出Error: full
若把main方法改为:
public static void main(String[] args){
Tank t1=new Tank();
t1.fullFill();
Tank t2=new Tank();
t2.empty();
System.gc();
}则运行结果什么也不会输出,为什么两种情况会不一样呢,在垃圾回收之前不是先会调用finalize方法么?
t1 = null;
t2 = null;这时两个对象才成为垃圾,才会被回收,finalize()方法才会被调用。