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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么方法里面的内部类只能访问finally修饰的值啊,有什么原因吗。

8 个回复

倒序浏览
轻羽涉池 来自手机 中级黑马 2015-4-5 12:09:06
沙发
方法内部类对象不能使用该内部类所在方法的非final局部变量。

因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,就消失了,但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们,若被final修饰,变量就会变成常亮,会存在方法区的常量池中,生命周期可能比类还长,这样就没问题了

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
轻羽涉池 来自手机 中级黑马 2015-4-5 12:12:21
藤椅
final不是finally
回复 使用道具 举报
顶顶顶顶顶顶
回复 使用道具 举报
final不是finally
回复 使用道具 举报

duang、duang
回复 使用道具 举报
方法中的内部类不能访问方法中的局部变量
因为他们的生命周期不一样,内部类是也是一个类,是存储在堆中,也只有当对该类的引用消失时,内部类才会消亡。而方法的局部变量是存储在堆栈中的,当调用结束时就会退栈,即在内存中这个属性就消失了。也就是说,内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。
解决方法就是在局部变量前加修饰符final
回复 使用道具 举报
轻羽涉池 发表于 2015-4-5 12:09
方法内部类对象不能使用该内部类所在方法的非final局部变量。

因为方法的局部变量位于栈上,只存在于该方 ...

谢谢,明白了。
回复 使用道具 举报
轻羽涉池 发表于 2015-4-5 12:09
方法内部类对象不能使用该内部类所在方法的非final局部变量。

因为方法的局部变量位于栈上,只存在于该方 ...

学习了,涨姿势了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马