这是上次我问别人的,我保存了答案。
首先在方法中定义一个内部类,但是它并不是方法的一部分,我们只是这样写代码,
目的是为了控制内部类的可见性,编译之后的结果,也会出现 外部类 和 内部类各自的字节码class文件,
这就说明内部类是一个独立的个体,他们就是两个类而已,他们各自都有自己的成员变量和方法。
并且方法的属性与内部类的生命周期不同。方法内的属性会被分配到内存中栈中的,
当方法调用结束的时候就会退栈,也就是说在内存中这个属性就消失了,然而这个内部类会被分配到堆内存中,
生命还在,并没有消失。如果让内部类再使用被销毁的属性这并不合理。
解决方法就是加上final关键字。在java中, 某个属性一旦加上final关键字,就 可以看作是常量,
而常量的生命周期在程序的整个执行期间都是有效的。所有这个时候的属性的生命周期变的比内部类更长了。所以可以引用, 不会出错。
|