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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class  Demo13
{
        public static void main(String[] args)
        {
                Outer out=new Outer();
                out.show();
        }
}
class Outer
{
        public void show()
        {
                int x=100;//当局部内部类调用到外部类的局部变量时,局部变量要用final修饰,
                                      可是为什么我不加final一样编译成功,而且答案跟加了fina相同?
                class Inner
                {
                        int y=50;
                        public void print()
                        {
                                System.out.print(x+"局部内部类的print方法。。。。。");
                        }
                }
                Inner in=new Inner();
                in.print();
        }       
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

4 个回复

倒序浏览
楼主JDK1.8版本的。这是1.8的新特性。jdk1.8在编译的时候自动把局部内部类使用的局部变量改成final了,可以尝试改变一下x的值,会发现依旧会因为声明了final而报错。
回复 使用道具 举报
杨佳名 发表于 2014-10-12 00:41
楼主JDK1.8版本的。这是1.8的新特性。jdk1.8在编译的时候自动把局部内部类使用的局部变量改成final了,可以 ...

哦  原来是这样啊。我是说呢,我之前在我一个朋友的电脑上面编译的,代码一模一样,在我的上面就通过,在他的上面就失败。。。。多谢啊。。。
回复 使用道具 举报
楼上说得对,这是1.8的新特性,在1.7运行时是这样的Demo13.java:20: 错误: 从内部类中访问本地变量x; 需要被声明为最终类型
                               System.out.print(x+"局部内部类的print方法。。。 。。");                                                  ^ 1 个错误
回复 使用道具 举报
1.7 | 1.8 新特性 没有中文api , 求分享 .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马