class Aa
{
static int x;
int index;
Aa()
{
x++;
System.out.println("第 " + x + "次产生对象");
setId(x);
}
void setId(int id)
{
index=id;
}
protected void finalize()
{
System.out.println("第 " + index + "个对象被回收");
}
public static void main(String args[])
{
new Aa();
new Aa();
new Aa();
System.gc();
}
}
/*结果为:
      第1次产生对象;      
  第3次产生对象;
  第3次产生对象;
  第1个对象被回收.
  第2个对象被回收.
  第3个对象被回收.
  
我有一点不明白的是在main方法中执行了三次new Aa()之后,再执行System.gc()之后gc()方法三次调用
finalize()这也能说的过去,可是那个index变量怎么会保存(1,2,3)的值呢?请教调用能简要说明一下这个
程序的执行过程.不胜感激!
*/

解决方案 »

  1.   

    Aa()
    {
    x++;
    System.out.println("第 " + x + "次产生对象");
    setId(x);
    }
    中setId(x)就把x的值放入到index变量中去了,这个是对象的属性,所以在最后调用的时候能依次显示1,2,3的值产生第一个对象,执行构造函数,x=1,index=x;
    产生第2个对象,执行构造函数,x=2,index=x;
    产生第3个对象,执行构造函数,x=3,index=x;
    最后再依次销毁
      

  2.   

    第 1次产生对象
    第 2次产生对象
    第 3次产生对象
    第 3个对象被回收
    第 2个对象被回收
    第 1个对象被回收楼主的运行结果有问题...index变量怎么会保存(1, 2, 3)?
    index本来就是实例变量, 每个对象都有自己的index, 在Aa()方法里, 使用setId对index进行赋值, 分别赋予了1, 2, 3...
      

  3.   

    楼上的朋友我的运行结果确实为:/*结果为:
          第1次产生对象;      
      第3次产生对象;
      第3次产生对象;
      第1个对象被回收.
      第2个对象被回收.
      第3个对象被回收.
    一楼的朋友说index是类的属性不错的确是类的属性,但是当main函数执行第三个new Aa();之后
    index的值应为:3接着System.gc()执行finalize()方法应当输出:
      第3个对象被回收.
      第3个对象被回收.
      第3个对象被回收.
    才能按正常的理解方式去理解啊?怎么变成1,2,3了呢?
      

  4.   

    index是对象自己的属性,不同的对象有不同的值
    利用x输出才是3,3,3
    因为x是类的公有属性
      

  5.   

    System.out.println("第 " + index + "个对象被回收");
    这里并不是
    System.out.println("第 " + x + "个对象被回收");x 是静态的,输出 x 的话,就会输出 三个 3
    但例子中输出的是 index
    index 是对象各自的属性,分别是 1, 2, 3
      

  6.   

    咽,的确有道理,多谢提醒,马上结帐贴,要特别的感谢
    ownraul(小蝴蝶的人偶太太太太可爱了~~~) ( ) 信誉:100    Blog   加为好友