猿问

java更新了吗,现在局部内部类可以访问非final的局部变量了吗

class Outer

{

        int num=3;

        void method()

        {

                final int y=50;

                class Inner

                {

                         void show()

                        {

                                System.out.println("show..."+y);

                        }

                }

                Inner in=new Inner();

                in.show();

        }

}

class InnerClassDemo3 

{

        public static void main(String[] args) 

        {

                new Outer().method();

        }

}

这段代码中,原本应该报错吗?从内部类访问局部变量,该局部变量需要是fianl类型啊?为什么我编译就通过呢?我用的是EditPlusPortable

qq_HkJxGnMdGm_0
浏览 872回答 1
1回答

onemoo

从你的另一个问题来看,你说的“需要是 final 类型”指的是 final int y = 50; 这句吧?你是想问,这里直接写 int y = 50; 也可以正常编译运行吧?(虽然这里你写了 final,不过你另一个问题的代码中没有写)我猜你用的是 JavaSE 8(或以上)的版本对吧?在 JavaSE 8 版时增加了新规定,local class 除了可以访问 final local 常量外,还可以访问“事实常量”(effectively final,抱歉我不知道该翻译成什么)。所谓“事实常量”就是指“虽然没有被声明为 final,但是在定义后就没有被更改的变量”。显然你这个代码中的 y 就是事实常量。
随时随地看视频慕课网APP

相关分类

Java
我要回答