黑马程序员技术交流社区

标题: 为什么方法里面的内部类只能访问finally修饰的值啊 [打印本页]

作者: woshixtdx    时间: 2015-4-5 11:33
标题: 为什么方法里面的内部类只能访问finally修饰的值啊
为什么方法里面的内部类只能访问finally修饰的值啊,有什么原因吗。
作者: 轻羽涉池    时间: 2015-4-5 12:09
方法内部类对象不能使用该内部类所在方法的非final局部变量。

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

duang、duang
作者: 翰墨    时间: 2015-4-6 15:18
方法中的内部类不能访问方法中的局部变量
因为他们的生命周期不一样,内部类是也是一个类,是存储在堆中,也只有当对该类的引用消失时,内部类才会消亡。而方法的局部变量是存储在堆栈中的,当调用结束时就会退栈,即在内存中这个属性就消失了。也就是说,内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。
解决方法就是在局部变量前加修饰符final

作者: woshixtdx    时间: 2015-4-6 20:27
轻羽涉池 发表于 2015-4-5 12:09
方法内部类对象不能使用该内部类所在方法的非final局部变量。

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

谢谢,明白了。
作者: doomsday    时间: 2015-4-6 21:39
轻羽涉池 发表于 2015-4-5 12:09
方法内部类对象不能使用该内部类所在方法的非final局部变量。

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

学习了,涨姿势了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2