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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© quan23355 中级黑马   /  2013-11-26 11:21  /  1012 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 quan23355 于 2013-11-26 11:42 编辑

为什么在局部位置上内部类访问局部变量时要声明为final,这点不是很理解,有那位大神帮我详细解释下,谢谢。
  1. class Outer
  2. {
  3. method()
  4. {

  5. final int x = 9; //内部类访问局部变量需声明为final

  6. class Inner
  7. {
  8. public String toString()
  9. {
  10. return "show ..."+x;
  11. }
  12. }
  13. }
  14. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 神马都是浮云

查看全部评分

1 个回复

正序浏览
这个问题主要涉及到生命周期,方法体一旦运行完了就不存在栈内存中了,而内部类对象是存在堆内存中的,所以就算方法运行完了,内部类对象也未必消失,如果这时候内部类中有局部变量,那么这个变量就会访问不到,如果加上final修饰的话,这个变量就会放到常量池中,也就避免了这样的错误。所以方法体中的内部类只能访问方法中被final修饰的局部变量

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马