在for循环中定义内部类的问题
在下面的程序中:class Outer
{ final int i=100;
int outer_x=100;
void test()
{
for(int i=0;i<10;i++)
{
class Inner
{
void display()
{
System.out.println("display:outer_x"+outer_x);
}
}
Inner inner=new Inner();
inner.display();
}
}
}
class InnerClassDemo
{
public static void main(String args[])
{
Outer outer=new Outer();
outer.test();
}
}
这个for循环中,每次循环在满足循环条件的情况下都要定义一次类class Inner,共定义了10次,我想知道为什么这不是类的重定义,因为编译能通过;同样,每次循环都生成了一个Inner类的对象inner,共生成了10个,为什么也能通过编译,而没有出现重定义的错误?
谢谢!!
[此贴子已经被作者于2006-1-15 17:50:50编辑过]
----------------解决方案--------------------------------------------------------
因为都是局部变量咯 出了for循环就失去了生命周期
----------------解决方案--------------------------------------------------------
但是这个类class Inner和对象inner的定义都是在for循环的内部呀,还没出for循环哪。
----------------解决方案--------------------------------------------------------
出了 一次循环就是一个生命周期
----------------解决方案--------------------------------------------------------
搞那么深奥的名词干吗?晕,你说出来她也不一定能
理解.
[此贴子已经被作者于2006-1-17 20:05:30编辑过]
----------------解决方案--------------------------------------------------------
呵呵,那你说个通俗易懂的吧。
----------------解决方案--------------------------------------------------------
因为都是在FOR循环的内部,FOR语句一次编译一个类,一共编译了十次,就是十个,我认为是这样
----------------解决方案--------------------------------------------------------
class Inner并未重复定义,只编译一次.
Inner inner=new Inner();重复运行了十次,
但每次的 inner 都不一样,inner是个局部变量
可通过修改 void display()看出
void display()
{
System.out.println("display:outer_x"+outer_x);
System.out.println("this:"+this);
}
----------------解决方案--------------------------------------------------------
...
display:outer_x100
this:inner$1Inner@d9f9c3
display:outer_x100
this:inner$1Inner@9cab16
display:outer_x100
this:inner$1Inner@1a46e30
....
@后面的都不同
----------------解决方案--------------------------------------------------------