黑马程序员技术交流社区

标题: 关于finalize方法使用的问题 [打印本页]

作者: 创出一片辉煌    时间: 2012-7-24 16:34
标题: 关于finalize方法使用的问题
关于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之后,输出的结果会是断开引用前的内容呢?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2