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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmayuan 中级黑马   /  2013-8-7 14:25  /  1106 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么属性名字前面加上final修饰符才能被内部类访问呢? 原理是什么~? 求大神指导!

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

5 个回复

倒序浏览
从内部类中访问局部变量,需要声明最终变量
回复 使用道具 举报
从内部类中访问局部变量,需要声明最终类型
回复 使用道具 举报
你说的是内部类访问局部变量要加final吧~~~因为内部类在堆里,局部变量在栈里~在局部代码块里执行的代码完后栈里的局部变量会消失这样会造成内部类访问不到局部变量,所以要把局部变量放到常量池里才能访问。  建议看下final的基础视频你会明白的~

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
你说的这种情况是指当内部类定义在类的局部变量的位置上时只能访问该局部final修饰的局部变量。
回复 使用道具 举报
内部类的生命周期和方法中的局部变量是不一样的,内部类也是一个类,存储在堆内存中。
  只有对该类的引用消失后,内部类才会消亡。而方法中的局部变量是存储在栈内存中的,当调用结束
  后,会消失。也就是内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用已经消亡的属性,存在安全隐患,故而方法中的内部类不能访问方法中的局部变量。但是被final修饰的变量存放在哪里,网上有种说法是存在于堆内存,我不确定。另外,此文章可能对你有帮助
http://blog.csdn.net/adderking/article/details/7622983如有错误,欢迎批评指正。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

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