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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Toxicant 中级黑马   /  2016-9-11 23:22  /  332 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法中的内部类能不能访问方法中的局部变量,为什么?运行一个含有内部类的方法堆栈图是怎么样的

1 个回复

倒序浏览
这个你需要看它们的生命周期了,方法的生命周期是随着方法被调用开始,随着方法执行完毕结束的。方法里面的内部类在执行的时候会生成一个对象,这个对象是在堆中。如果用的是方法中的局部变量,那么方法结束的时候,会出现这样的情况,堆里面的对象的属性值为不存在,而我们知道,在java中是不允许出现这样的情况的。你可能会说,这个时候,这个对象虽然没有被垃圾回收机制回收,但是,应该也是没有意义了吧,怎么会考虑这个问题呢,是有这么一种情况的:我们可以把这个对象在方法中作为一个参数传递给其他的方法的。这时候,这个对象的生命周期就可能会长于这个方法,所以就会出现一个不合理的对象被引用。因此,方法中的内部类,不能访问方法中的局部变量。我们通常的解决办法是:1.static修饰,这样的话,会将这个变量放到代码区,这里的变量是随着类的加载而加载,随着类的消失而消失的,所以就可以避免掉刚才的问题。2.我们将这个变量用final修饰,这样变量定义到常量池中,在常量池中的常量是不会消失的,它的消失,是类似于堆中对象的垃圾回收机制一样的。就是说,当指向常量的引用消失,并且常量池空间不够的时候才会被回收的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马