黑马程序员技术交流社区
标题:
内部类问题2
[打印本页]
作者:
葛晓东
时间:
2014-5-29 21:25
标题:
内部类问题2
内部类方法
class Outer
{
public void show(){
final int x = 3;
class Inner
{
public void abc(){
System.out.println("Inner...abc"+x);
}
}
new Inner().abc();
}
}
class InnerClassDemo3
{
public static void main(String[] args)
{
new Outer().show();
}
}
复制代码
内部类的方法,访问局部变量,局部变量必须加final修饰这是为什么?
作者:
落叶非花
时间:
2014-5-29 21:27
因为没有创建对象,只是通过类名直接访问属性
作者:
yang1352546
时间:
2014-5-29 21:44
show方法进栈,带着变量x一起进栈
运行完毕了,show出栈,变量x死亡
Inner是一个类,创建对象的,
如果show方法死亡,Inner还有可能有对象存在
对象调用abc 变量x已经死亡
第一种说
加final后,变量,变成常量,存储位置发生了变化
常量池 'a' 12 生命最长的
即使show出栈后,变量,还在常量池
第二种说
变量加上final后,生命周期没有改变
跟着show的存在而存在,消失而消失
x终身已经固定了,因此javac编译
生成的class文件,abc方法中,写进去了abc2
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2