关于finalize方法使用的问题
书上的一段代码:
class Person1{
private String name ;
private int age ;
public Person1(String name,int age){
this.name = name ;
this.age = age;
}
public String toString(){ // 覆写toString()方法
return "姓名:" + this.name + ",年龄:" + this.age ;
}
public void finalize() throws Throwable{ //覆写,对象释放空间时默认调用此方法
System.out.println("对象被释放 --> " + this) ;
}
};
public class SystemDemo04{
public static void main(String args[]){
Person1 per = new Person1("张三",30) ;
per = null ; // 断开引用
System.gc() ; // 强制性释放空间
}
};
在最后的释放空间这里,此时引用已经断开了,而System.gc()执行之后释放空间,
此时finalize方法被调用,结果是对象被释放 --> 姓名:张三,年龄:30
问题如下:
此时per=null已经执行,已经断开引用了,如果不使用gc进行释放,
此时直接使用System.out.println(per),输出的结果会是null,
那为什么执行gc之后,输出的结果会是断开引用前的内容呢?
|