黑马程序员技术交流社区
标题:
局部内部类访问局部变量的疑惑?
[打印本页]
作者:
715596417
时间:
2016-3-25 23:41
标题:
局部内部类访问局部变量的疑惑?
public class Demo {
public static void main(String[] args) {
Outer o=new Outer();
o.print();
}
}
class Outer{
public void print(){
final int x=10;
class Inner{
public void show(){
System.out.println(x);
}
}
Inner i=new Inner();
i.show();
}
}
复制代码
局部变量会随着方法的调用完毕而消失,难道调用print()方法的时候这个变量已经消失了吗?我有点不明白了。总觉得在这个方法内没有消失呀。
作者:
715596417
时间:
2016-3-31 15:51
是变量作用域的问题,因为匿名内部类是一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为 final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一 个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。
作者:
妄想年少轻狂
时间:
2016-3-31 21:55
x被final修饰后就是常量,存储在常量池中,不会消失
作者:
user_lqb
时间:
2016-3-31 22:07
学习一下
作者:
chenzhi1217
时间:
2016-3-31 23:42
哈哈。我来支持下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2