黑马程序员技术交流社区

标题: 话说内部类在局部时不是不可以访问它所在局部的变量的吗 [打印本页]

作者: 月影箫风起k    时间: 2014-7-14 20:24
标题: 话说内部类在局部时不是不可以访问它所在局部的变量的吗
为啥我的程序直接就能访问了。。。。
class Demo
{
        public static void main(String[] args)
        {
                Outer o=new Outer();
                o.Ob();
                new Outer().Ob();
        }
}
class Outer
{
        int x=4;
        void Ob()
        {       
                int y=5;
                class Inner
                {
                        void function()
                        {
                                System.out.println("Inner="+y);
                        }
                }
       
                new Inner().function();
        }
        void show()
        {
                System.out.println("Outer="+x);
        }
}
输出结果是Inner=5。。。。。
作者: lancerjs    时间: 2014-7-14 20:40
话说我这里编译会报错,你确定int y = 5前面没加final修饰?
作者: 月影箫风起k    时间: 2014-7-15 12:53
lancerjs 发表于 2014-7-14 20:40
话说我这里编译会报错,你确定int y = 5前面没加final修饰?

我确定啊,直接就出结果了,弄了好几次都是
作者: jwx555    时间: 2014-7-15 13:31
  1. Input.java:20: 错误: 从内部类中访问本地变量y; 需要被声明为最终类型
  2.                                 System.out.println("Inner="+y);
  3.                                                             ^
  4. 1 个错误
复制代码


我读书少,你不要骗我
作者: Adjin    时间: 2014-7-15 13:58
嗯,是的,我昨天开始前面没有加final也输出了
作者: 陈云阳    时间: 2014-7-15 14:34
那就是编译器出问题了,因为java规定局部内部类访问局部变量必须加final,这是程序健壮性的问题
作者: 月影箫风起k    时间: 2014-7-15 21:24
陈云阳 发表于 2014-7-15 14:34
那就是编译器出问题了,因为java规定局部内部类访问局部变量必须加final,这是程序健壮性的问题 ...

什么叫编译器出问题了,新人求教。。。。怎么办呢
作者: 月影箫风起k    时间: 2014-7-15 21:28
jwx555 发表于 2014-7-15 13:31
我读书少,你不要骗我

这个真没骗你。。。
作者: 月影箫风起k    时间: 2014-7-15 21:29
Adjin 发表于 2014-7-15 13:58
嗯,是的,我昨天开始前面没有加final也输出了

是吧,不知道怎么回事
作者: 黎志勇    时间: 2014-7-15 21:30
本帖最后由 黎志勇 于 2014-7-15 21:37 编辑

编译出错,你把已经生成的.class文件全删掉,再编译看看。
作者: F@C    时间: 2014-7-15 22:04
进来学习  看看
作者: 人心如水    时间: 2014-7-15 22:08
看到有人说代码在editPlus上可以,在Eclipse出错,不过你这个肯定有问题啊,删除源代码看看




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