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 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
从你的另一个问题来看,你说的“需要是 final 类型”指的是 final int y = 50; 这句吧?
你是想问,这里直接写 int y = 50; 也可以正常编译运行吧?
(虽然这里你写了 final,不过你另一个问题的代码中没有写)
我猜你用的是 JavaSE 8(或以上)的版本对吧?
在 JavaSE 8 版时增加了新规定,local class 除了可以访问 final local 常量外,还可以访问“事实常量”(effectively final,抱歉我不知道该翻译成什么)。
所谓“事实常量”就是指“虽然没有被声明为 final,但是在定义后就没有被更改的变量”。
显然你这个代码中的 y 就是事实常量。
添加回答
举报
0/150
提交
取消