这个说起来就比较复杂了.总的来说是内部类和外部类的局部变量的生命周期不同导致的.
内部类的对象可以再方法结束后继续存活(只要改对象被引用了就不会消亡),但是方法结束了,局部变量却消亡了.这就会出现内部类的对象去调用一个不存在的局部变量这种奇怪的事情.
那为毛用final修饰以后就可以了呢?
这一点我还没有完全理解,网上的解释是这样的.
定义为final后,编译程序的实现方法:将所有的局部内部类对象要访问的final型局部变量,都拷贝成为该内部类对象中的一个数据成员。这样,即使栈中局部变量(含final)已死亡,但由于它是final,其值永不变,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。
希望对卤煮有帮助. |