黑马程序员技术交流社区

标题: 内部类的对象在内存中到底是怎样的存在 [打印本页]

作者: HARRY_yFd0S    时间: 2016-9-7 09:04
标题: 内部类的对象在内存中到底是怎样的存在
为什么局部内部类不能访问不带final局部变量呢?
作者: loveimust    时间: 2016-9-8 19:34
来占给沙发
作者: double_x    时间: 2016-9-8 19:42
因为局部变量是跟着方法进栈而存在  方法弹栈而消亡的  而你的局部内部类是有垃圾回收机制gc自动回收的  有可能局部内部类还用着局部变量 但是方法弹栈了  就找不到了  所以加final是为了延长变量的生命周期
作者: wosika    时间: 2016-9-8 19:45
因为局部变量是随着方法的进栈而产生的,方法弹栈以后,也随之消失。
而类是加载进方法区里的,如果方法执行结束以后,局部变量没有加final 就会消失了,这样对象就访问了一个不存在的变量,是不允许的。
这种矛盾是由局部内部类可以访问局部变量但是局部内部类对象和局部变量的生命周期不同而引起的。
所以我们要在局部变量上加一个final修饰,让它变成常量




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