首页 > 其他 > 详细

内部类访问方法中的局部变量

时间:2019-10-10 17:16:15      阅读:97      评论:0      收藏:0      [点我收藏+]

最近看了一道面试题:Static Nested Class 和 Inner Class的不同。

闲着无聊,就把Inner Class里成员内部类、局部内部类、匿名内部类和静态内部类都复习一遍。

在测试内部类访问局部变量的时候发现了很有趣的现象,如下:

public class Outer {

    public void method() {
        int as = 1;
        class Inner
        {
            public void method()
            {
                System.out.println(as);
            }
        }
    }
}

在修改了变量as之后,编译不能通过。

技术分享图片

Eclipse提示我这里只能访问final常量或effectively final,effectively final是什么,字面意思是有效常量,我理解为等价常量。

 

 

 

后来查询资料,发现effectively final出现在java8之后,内部类在访问局部变量时,如果该变量可以视为final,即定义后再也未被修改过,系统会将其认为effectively final,等价于final。

总结
java8之前:只能访问外部方法中被final修饰的常量,且不能修改。
java8之后:除了访问常量,还可以防问”effectively final“,即被定义后就没有被更改的变量。

 

内部类访问方法中的局部变量

原文:https://www.cnblogs.com/heyuanliang/p/11649109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!