快捷导航

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

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

从你的另一个问题来看,你说的“需要是 final 类型”指的是finalinty = 50;这句吧?
你是想问,这里直接写inty = 50;也可以正常编译运行吧?
(虽然这里你写了final,不过你另一个问题的代码中没有写)


我猜你用的是JavaSE 8(或以上)的版本对吧?
在JavaSE 8版时增加了新规定,localclass除了可以访问finallocal常量外,还可以访问“事实常量”(effectively final,抱歉我不知道该翻译成什么)。
所谓“事实常量”就是指“虽然没有被声明为final,但是在定义后就没有被更改的变量”。
显然你这个代码中的y就是事实常量。
回复

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP