黑马程序员技术交流社区

标题: 很奇怪的一个局部类访问非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