黑马程序员技术交流社区
标题:
很奇怪的一个局部类访问非final局部变量照样也能运行的问...
[打印本页]
作者:
李斌
时间:
2012-5-22 11:18
标题:
很奇怪的一个局部类访问非final局部变量照样也能运行的问...
本帖最后由 李斌 于 2012-5-22 11:22 编辑
如题,求解释哦~~
class A1
{
public void shout (int iargs)
{
class B
{
public void shout1(int a)
{
System.out.println(a);
}
}
B b = new B();
b.shout1(iargs);
}
}
class Test2
{
public static void main(String [] args)
{
A1 a = new A1();
a.shout(5);
}
}
作者:
冯越
时间:
2012-5-22 11:23
本帖最后由 冯越 于 2012-5-22 11:32 编辑
我去~ 你这明显理解有误
java规定
在内部类的内部只能访问final型的局部变量
。可你这明显不是在内部类中引用,而你是在内部类B外面,外部类A1的shout方法内去使用当然不需要使用final关键字了。
如果你在内部类B内部是使用局部变量 iargs 那shout方法中定义的局部变量就必须是 final int iargs了。
作者:
黑马-唐磊
时间:
2012-5-22 11:37
本帖最后由 麦田里的守望者 于 2012-5-22 11:54 编辑
你这个应该不是在内部类中引用,而且你那个内部类在外面。我记得java内部类只能访问final类型局部变量,内部类不能访问方法局部变量,想访问必须final,因为内部内是一个类,是在堆内存里,创建对象也在堆内存,在内部内访问方法的局部变量就是栈内存的局部变量,用堆内存的数据去访问栈内存的数据是访问不到的,因为堆内存比栈内存存活时间长,所以加上final则变量就变成常量,常量是放在常量池也在堆内存,所以存活时间一样长.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2