A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我发现我写代码的时候,我不在方法的变量前面加final,编译和运行局部内部类一点问题也没有啊~~大家发现没?

6 个回复

倒序浏览
讲的好泛泛,举个例子看看呗
回复 使用道具 举报
雨下阳光 发表于 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:05 编辑

这个问题我前些天学习也发现了,是楼主JDK1.8版本的原因。jdk1.8的新特性,jdk1.8在编译的时候自动把局部内部类使用的局部变量改成final了。楼主虽然没有定义final,但更改i的值后,编译同样出错。下载一个JDK1.7再编译就不会出现这个问题了。不要把知识点记错了就好,局部内部类是不可能访问非final的局部变量的。
回复 使用道具 举报
局部内部类和成员内部类一样可以访问外围类的所有成员,但是不可以访问同在一个局部块的普通局部变量。所以变量是不需要被声明final的。
回复 使用道具 举报
杨佳名 发表于 2014-9-20 13:00
这个问题我前些天学习也发现了,是楼主JDK1.8版本的原因。jdk1.8的新特性,jdk1.8在编译的时候自动把局部内 ...

我猜也是
回复 使用道具 举报
内部类是可以直接访问外围类的变量。但是外部类就不行,得实例化内部类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马