i是Chair的非静态成员变量,当然是一个实例一个值了有确定关系

解决方案 »

  1.   

    恩,是一个实例一个值,
    我也认为有几个chair就会有几个i,但每一个chair都映射到一个确定的i中吗,这点我想不通,能不能解释一下啊,或者提示在哪边有这个解释啊
    谢谢
      

  2.   

    我的理解是:每一次都分别把一个chair和i放到某个地方,而不是把i 这个标签贴到chair上,然后放到某个地方,所以当回收的时候,就不能找到第47个chair了啊,要是i和chair绑在一起的,就可以找到了,对吧
      

  3.   

    噢,我好象明白了,比如产生chair1和chair2,那么其实i应该是chair1.i和chair2.i,对吧,哎,我都看糊涂了!!!
    我这次的想法应该没错吧!
      

  4.   

    每一个新产生的chair都有一个i(1-47)。回收的过程是由jvm的gc机制自己搞定的,不需要知道它的i是多少或是哪个chair,只没有其它对象引用的chair都会被收回。它是是否被引用为标准,而不需要管它是哪一个chair对象。好比拾可乐罐,我不需要知道它是可口可乐、百事可乐或是非常可乐的罐子,只要是喝光了的罐子,都可以回收!:)
      

  5.   

    感谢对于treesoft的回复,但我对你的看法有点疑问:具体到我上面的程序,每一个chair的i是多少应该是有关系的吧,要不然怎么去判断i==47呢,所以我觉得每个i和每个chair是捆绑的,就和zjpangxie说的那样!
    谢谢treesoft和zjpangxie!
    还有个问题,我如果把
    while(!Chair.f) {
          new Chair();
          new String("To take up space");
        }
    这段改成以下:
    while(!Chair.f){
          new Chair();
          String s = new String("To take up space");
          System.out.println(s);
    }
    那么就不会输出
    created 47
    Beginning to finalize after xxxx Chairs have been created这两句了,这是为什么呢?
      

  6.   

    这段改成以下:
    while(!Chair.f){
          new Chair();
          String s = new String("To take up space");
          System.out.println(s);
    }
    那么就不会输出
    created 47
    Beginning to finalize after xxxx Chairs have been created这两句了,这是为什么呢?--------------------------------------------------------------------------------因为你输出的String太多了,命令行显示不下了,其实在程序运行的早些时候就显示这两句了。你没看到罢了。可以试着在 java Garbage回车以后,马上按Ctrl+C,再回过头去找,就找到那两句了。
      

  7.   

    不懂你的意思,改成你说的:
    while(!Chair.f){
          new Chair();
          String s = new String("To take up space");
          System.out.println(s);
    }
    created 47
    Beginning to finalize after xxxx Chairs have been created
    也会输出了.i和chair的关系就是一个chair对应一个i.当chair创建的时候,i就创建了,chair被回收了后,i就没有了.
      

  8.   

    TIJ 3rd 中,作者好像把这个例子去掉了,而是取而代之用大量文字太解释finalize和garbage collection,是不是因为这个例子太费解?