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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java25 中级黑马   /  2016-6-15 16:18  /  590 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

局部内部类在访问局部变量的时候,局部变量不加final程序为什么会报错?

3 个回复

倒序浏览
局部变量的生命周期与局部内部类的对象的生命周期的不一致。局部变量当所处的函数执行结束后就已经死亡了,不存在了,但是局部内部类对象还可能一直存在(只要有人还引用该对象),这是就会出现了一个悲剧的结果,局部内部类对象访问一个已不存在的局部变量。
回复 使用道具 举报
sgzqsw 发表于 2016-6-15 17:52
局部变量的生命周期与局部内部类的对象的生命周期的不一致。局部变量当所处的函数执行结束后就已经死亡了, ...

局部内部类对象的引用也是和局部变量的生命周期是一致的啊,你不可能在方法外引用局部内部类吧。
回复 使用道具 举报
java25 发表于 2016-6-15 22:31
局部内部类对象的引用也是和局部变量的生命周期是一致的啊,你不可能在方法外引用局部内部类吧。 ...

局部内部类和局部变量生命周期谁告诉你是一致的?
内部类是也是一个类,是存储在堆中(你看看编译完后文件夹里是不是自动出现了Out$1Int.class),也只有当对该类的引用消失时,内部类才会消亡。而方法的局部变量是存储在堆栈中的,当调用结束时就会退栈,即在内存中这个属性就消失了。也就是说,内部类的生命周期超过了方法中局部变量的生命周期。
而且到了现在在1.8版本以后也就不存在了这问题,编译器会自动加final,编译不会出错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马