即使外部变量不是final,编译器也可以处理:自己定义一个同类型的变量,然后在构造方法中赋值就行了。
原因就是为了让我们能够符合逻辑的直接使用外部变量,而且看起来是在始终使用 作者: 张权 时间: 2013-2-2 13:37
方法内部类对象不能使用该内部类所在方法的非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();
}
}作者: 李培根 时间: 2013-2-18 11:33
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。