本帖最后由 赵英坤 于 2012-3-11 10:27 编辑
因为变量的作用时间,不是final的局部变量,你的方法结束了就没了。
但是你的内部类却不是和你的方法同时执行的,比如实现ActionListener,当你事件发生的时候才会执行,这时你的方法已经结束了,ActionListener到哪里去找这个局部变量呢?
不知道说的是不是明白,特再附上一篇找来的(说的挺好的):
方法内部类对象不能使用该内部类所在方法的非final局部变量。
因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
下面是完整的例子:
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
} |