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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为啥我的程序直接就能访问了。。。。
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。。。。。

11 个回复

倒序浏览
话说我这里编译会报错,你确定int y = 5前面没加final修饰?
回复 使用道具 举报
lancerjs 发表于 2014-7-14 20:40
话说我这里编译会报错,你确定int y = 5前面没加final修饰?

我确定啊,直接就出结果了,弄了好几次都是
回复 使用道具 举报
  1. Input.java:20: 错误: 从内部类中访问本地变量y; 需要被声明为最终类型
  2.                                 System.out.println("Inner="+y);
  3.                                                             ^
  4. 1 个错误
复制代码


我读书少,你不要骗我
回复 使用道具 举报
嗯,是的,我昨天开始前面没有加final也输出了
回复 使用道具 举报
那就是编译器出问题了,因为java规定局部内部类访问局部变量必须加final,这是程序健壮性的问题
回复 使用道具 举报
陈云阳 发表于 2014-7-15 14:34
那就是编译器出问题了,因为java规定局部内部类访问局部变量必须加final,这是程序健壮性的问题 ...

什么叫编译器出问题了,新人求教。。。。怎么办呢
回复 使用道具 举报
jwx555 发表于 2014-7-15 13:31
我读书少,你不要骗我

这个真没骗你。。。
回复 使用道具 举报
Adjin 发表于 2014-7-15 13:58
嗯,是的,我昨天开始前面没有加final也输出了

是吧,不知道怎么回事
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-7-15 21:37 编辑

编译出错,你把已经生成的.class文件全删掉,再编译看看。
回复 使用道具 举报
F@C 中级黑马 2014-7-15 22:04:21
11#
进来学习  看看
回复 使用道具 举报
看到有人说代码在editPlus上可以,在Eclipse出错,不过你这个肯定有问题啊,删除源代码看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马