黑马程序员技术交流社区

标题: 很疑惑!局部内部类访问方法中的变量 [打印本页]

作者: MichaelRodman    时间: 2014-9-20 11:53
标题: 很疑惑!局部内部类访问方法中的变量
我发现我写代码的时候,我不在方法的变量前面加final,编译和运行局部内部类一点问题也没有啊~~大家发现没?

作者: 雨下阳光    时间: 2014-9-20 12:17
讲的好泛泛,举个例子看看呗
作者: MichaelRodman    时间: 2014-9-20 12:31
雨下阳光 发表于 2014-9-20 12:17
讲的好泛泛,举个例子看看呗

class A
{
        public void show()
        {
                int i=0;               
                class B
                {
                        public void print()
                        {
                                System.out.println(i);
                        }                       
                }
                new B().print();
        }
}
你可以调用i,你不信试试
作者: 杨佳名    时间: 2014-9-20 13:00
本帖最后由 杨佳名 于 2014-9-20 13:05 编辑

这个问题我前些天学习也发现了,是楼主JDK1.8版本的原因。jdk1.8的新特性,jdk1.8在编译的时候自动把局部内部类使用的局部变量改成final了。楼主虽然没有定义final,但更改i的值后,编译同样出错。下载一个JDK1.7再编译就不会出现这个问题了。不要把知识点记错了就好,局部内部类是不可能访问非final的局部变量的。

作者: 高泳    时间: 2014-9-20 13:15
局部内部类和成员内部类一样可以访问外围类的所有成员,但是不可以访问同在一个局部块的普通局部变量。所以变量是不需要被声明final的。
作者: MichaelRodman    时间: 2014-9-20 13:41
杨佳名 发表于 2014-9-20 13:00
这个问题我前些天学习也发现了,是楼主JDK1.8版本的原因。jdk1.8的新特性,jdk1.8在编译的时候自动把局部内 ...

我猜也是
作者: Unknown_Explore    时间: 2014-9-20 13:44
内部类是可以直接访问外围类的变量。但是外部类就不行,得实例化内部类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2