很简单,把你的代码改一改,Rock R;定义写到循环外。
另外,不建议把R.print()写到循环外这种做法,我不知道你想干什么。
对象一定要new了才能对它进行操作,除非你调用的是static成员方法。public class SimpleConstructor {
public static void main(String[] args) {
                   Rock R = new Rock();
for(int i = 0; i < 10; i++)
{R= new Rock();
System.out.println(i);}

R.print();

  }

解决方案 »

  1.   

    对象和变量什么的都有scope的概念,既然你是在循环中声明的,那就是在循环的{}中才有效。
      

  2.   

    R的生命期在for loop的‘}’结束。这属于编译错误,编译器应该指出R.print()的R未定义,没什么GC积极不积极的问题。
      

  3.   

    对象和变量什么的都有scope的概念,明白了,谢谢大胃
      

  4.   

    是scope的问题,对象还在但对象的句柄被摧毁了。
      

  5.   

    {
     int y=8;
      //only y available
      { int z=8;
         //both y,z available
      }
      //only y available
      //z out of scope}
      

  6.   

    你的变量r的生存期就是那个循环里面,在for循环结束的时候,那个变得生存期已经结束了,当然出错了!
      

  7.   

    JAVA运行时系统的“垃圾收集器”启动执行的条件:
    1)堆栈中的存储数量少于某个特定的水平。
    2)程序强制调用系统类的垃圾收集方法gc();
    3)系统空闲。我的课本是这样说的。
      

  8.   

    R在for内是局部变量.
    你在调用一个不存在的变量, 所以会报错.