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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cuculidae 中级黑马   /  2016-2-18 23:43  /  404 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么匿名内部类访问所在方法的成员变量时,成员变量要用final修饰?

2 个回复

倒序浏览
这是变量生命周期的问题,如果没用final修饰,则当方法调用完毕,方法弹栈,这个变量也就消失了,若此时匿名内部类对象还没有马上消失想用这个变量,就无法再使用了。当用final修饰之后,这个变量就进入了常量池,方法弹栈之后,变量依然存在,可以继续被匿名内部类对象使用。

在JDK1.7版本及其之前,final要自己写,从JDK1.8开始,final不用自己写,系统会默认加上。
回复 使用道具 举报
因为内部类之可以访问自己内部的变量,成员变量加上final,就成了常量,在常量池中,所以可以访问用final修饰的变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马