因为局部变量是临时的,方法一旦执行完毕即被释放,而内部类是要在java虚拟机中动态运行的程序,它的生命周期不随方法的结束而结束,故而。。。
如下:
class A
{
int i = 3;
public void shout()
{
class B
{
public void shout1()
{
System.out.println(i);
}
}
B b=new B();
b.shout1();
}
public static void main(String [] args)
{
A a=new A();
a.shout();
}
}
可正常输出3,证明可以访问类的变量i,但改为下面的方式:
class A
{
public void shout(int temp)
{
final int i = temp;
class B
{
public void shout1()
{
System.out.println(i);
}
}
B b=new B();
b.shout1();
}
public static void main(String [] args)
{
A a=new A();
a.shout(3);
}
}
如不是final变量, 当i发生变化, 类B实例不能找到新i变量的地址, 便会出现了歧义. 如不希望final, 可讲i定义为A的类成员变量 |