日期:2014-05-20  浏览次数:20758 次

初学java—内部类访问外部类的数据成员
public class A
{
    public static void main(String[] args)
    {
       final int x=11,y=22;
       class B
       {
           void f(){System.out.println(x+y);}
       }
       B k=new B();
       k.f();
    }    
}

请问一下,为什么红色的地方必须是final?

------解决方案--------------------
方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变