hexiaofeng(java爱好者) for(int j=0;j<3;j++) { Chair kk= new Chair(); System.out.println(kk.i);//i是Chair中的变量 //kk被收集,因为到了"}" }循环一次kk就被清掉一次(垃圾收集) **************** kk被收集了吗? 我看过一个程序: 在这样一个循环中 while(!Chair.f) { new Chair();
} Chair.f是在finalize()中变成的true。在这个程序中,new Chair()了2903次后,java才开始调用垃圾回收器。kk应该是对象的句柄吧?当用new分配后,每个对象都有独立的储存空间和各自的句柄,如果不加{}则创建的句柄就不是唯一的。我是这样理解的,不知道对不对?唉,最近看Thingk in java都看傻了,变得爱钻牛角尖了。
Vector v = new Vector(); v.add(new Chair()); v.add(new Chair());(Chair()v.elementAt(0)).method();
for(int j=0;j<3;j++){
Chair kk= new Chair();
System.out.println(kk.i);//i是Chair中的变量
}
中可以执行,为什么
Chair kk=new Chair();
System.out.println(kk.i);
Chair kk=new Chair();
System.out.println(kk.i);就不行?
{
Chair kk= new Chair();
System.out.println(kk.i);//i是Chair中的变量
//kk被收集,因为到了"}"
}循环一次kk就被清掉一次(垃圾收集)
System.out.println(kk.i);
Chair kk=new Chair();
System.out.println(kk.i);因为变量的作用域不一样改成
{Chair kk=new Chair();
System.out.println(kk.i);
}
Chair kk=new Chair();
System.out.println(kk.i);
或
Chair kk=new Chair();
System.out.println(kk.i);
kk=new Chair();
System.out.println(kk.i);
就可以。
for循环里面定义的变量范围只是在for循环里面,所以每次循环都是一个不同的临时变量。
你后面的代码,等于是在一个空间里面定义了两个同名的变量,当然不行了(任何语言里都不行)
建议你去看看变量的作用域。
for(int j=0;j<3;j++)
{
Chair kk= new Chair();
System.out.println(kk.i);//i是Chair中的变量
//kk被收集,因为到了"}"
}循环一次kk就被清掉一次(垃圾收集)
****************
kk被收集了吗?
我看过一个程序:
在这样一个循环中
while(!Chair.f) {
new Chair();
}
Chair.f是在finalize()中变成的true。在这个程序中,new Chair()了2903次后,java才开始调用垃圾回收器。kk应该是对象的句柄吧?当用new分配后,每个对象都有独立的储存空间和各自的句柄,如果不加{}则创建的句柄就不是唯一的。我是这样理解的,不知道对不对?唉,最近看Thingk in java都看傻了,变得爱钻牛角尖了。
v.add(new Chair());
v.add(new Chair());(Chair()v.elementAt(0)).method();