A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 创出一片辉煌 中级黑马   /  2012-7-24 16:34  /  994 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于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之后,输出的结果会是断开引用前的内容呢?

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马