A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fzh945 中级黑马   /  2015-12-11 19:27  /  797 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名内部类中使用外部的局部变量为什么一定要是final类型?

4 个回复

倒序浏览
不懂帮顶
回复 使用道具 举报
xiaobei56 来自手机 中级黑马 2015-12-11 20:20:48
藤椅
这是因为生命周期的原因。首先你要知道内部类和外部类是平级的,二、成员变量是随着类的生命周期结束而被回收。如果 变量没有被final修饰,外部类一旦结束生命周期,该变量被GC,内部类就不能找到该变量。但被final修饰之后就不会被回收了。
回复 使用道具 举报
xiaobei56 来自手机 中级黑马 2015-12-11 20:27:02
板凳
修改一下上面的啊  有点歧义了 。就是最后被final修饰  后,不是因为被final修饰  就不会被回收而是java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
回复 使用道具 举报
匿名内部类是定义在方法中的类,它在等级上是跟外部类相等的,也就是在编译时外部类被加载的时候,内部类也随之加载。而方法中的局部变量是在方法被调用时才进栈,结束调用即销毁,所以在生命周期上匿名内部类跟局部变量是不等的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马