Java 匿名内部类调用局部变量

13人阅读 评论(0) 收藏 举报
分类:

Java 8 之前,匿名内部类中使用 局部变量,需要强制使用 final 修饰


Java 8 开始匿名内部类使用的外部变量不再被强制用final修饰。

外部变量要么是final的;要么自初始化后值不会被改变

这两种都是可以在匿名内部类中使用且编译通过。

但是 java8只是对‘事实上final’变量可以不声明final标识符而已,其实还是要求final,


参考资料:

1、java为什么匿名内部类的参数引用时final?
https://www.zhihu.com/question/21395848

2、Java语法糖系列五:内部类和闭包
https://www.jianshu.com/p/f55b11a4cec2

3、关于java8中匿名内部类引用局部变量的更新
https://my.oschina.net/u/2931572/blog/755035


查看评论

嵌套类(内部类)

本门课程是主要介绍嵌套类(内部类)概念及语法,介绍各种内部类的语法,变量声明及实例化。为什么要使用嵌套类(内部类)等。
  • 2017年01月30日 17:41

Java匿名内部类使用局部变量

在Java8之前,我们在匿名内部类或者局部内部类中使用局部变量都需要将局部变量声明为final,这是因为java底层给我们做了一些小动作,匿名内部类表面上没有构造函数,其实是有的,底层直接将局部变量通...
  • a62321780
  • a62321780
  • 2017-03-04 17:29:01
  • 756

为什么匿名内部类调用的方法内局部变量必须为final

Why inner classes require “final” outer instance variables ?      finalJTextFieldjtfContent =n...
  • scyatcs
  • scyatcs
  • 2015-03-09 17:48:36
  • 1458

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

匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型   1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量...
  • qq_27840621
  • qq_27840621
  • 2017-03-09 13:10:40
  • 431

匿名内部类为什么访问外部类局部变量必须是final的?

首先声明,这个是我转载的文章,但是下面的“我的理解”是个人的总结,如果觉得下面的有点长,或者看不懂可以参考一下我的理解。如果有大神觉得我的理解存在问题,可以给我留言1. 内部类里面使用外部类的局部变量...
  • qq_41841298
  • qq_41841298
  • 2018-04-11 18:32:06
  • 9

为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?

http://www.blogjava.net/DLevin/archive/2011/11/23/364599.html 昨天有一个比较爱思考的同事和我提起一个问题:为什么匿名...
  • wwww4
  • wwww4
  • 2015-07-02 20:51:19
  • 1235

匿名内部类访问局部变量加final修饰的问题

当使用匿名内部类的时候,如果匿名内部类需要访问匿名内部类所在方法中的局部变量的时候,必须给局部变量加final进行修饰。不加final修饰的局部变量,匿名内部类是访问不到的。这是为什么呢?      ...
  • jiao_zg
  • jiao_zg
  • 2017-12-27 14:03:55
  • 97

为什么Java匿名内部类的方法中用到的局部变量都必须定义为final

匿名内部类可以直接使用外部类的局部变量,看上去就像匿名内部类中使用的引用和外部类的引用是一个引用一样。如: public interface Test2 { public void test2(...
  • mr_orange_klj
  • mr_orange_klj
  • 2016-05-26 12:32:38
  • 585

Java匿名类中使用的局部变量为何要加final

这几天,在网上找了一些关于final的知识,当然并不全面,有的一时也没有很好的理解,先收集起来,理理思路,把不懂的画出来,以便更好地学习…… java中的final关键字通常的指的是“这是无法改...
  • rookieding
  • rookieding
  • 2014-08-20 16:20:40
  • 10534

匿名内部类访问外部类中的局部变量必须是final属性

如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final的。 1.匿名内部类肯定是局部内部类(在一个方法里面定义的内部类),因为在java中,语句必须...
  • u012150590
  • u012150590
  • 2016-05-29 17:32:07
  • 305
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 52万+
    积分: 1万+
    排名: 1156
    博客专栏
    最新评论