黑马程序员技术交流社区

标题: 局部内部类访问局部变量 [打印本页]

作者: java25    时间: 2016-6-15 16:18
标题: 局部内部类访问局部变量
局部内部类在访问局部变量的时候,局部变量不加final程序为什么会报错?
作者: sgzqsw    时间: 2016-6-15 17:52
局部变量的生命周期与局部内部类的对象的生命周期的不一致。局部变量当所处的函数执行结束后就已经死亡了,不存在了,但是局部内部类对象还可能一直存在(只要有人还引用该对象),这是就会出现了一个悲剧的结果,局部内部类对象访问一个已不存在的局部变量。
作者: java25    时间: 2016-6-15 22:31
sgzqsw 发表于 2016-6-15 17:52
局部变量的生命周期与局部内部类的对象的生命周期的不一致。局部变量当所处的函数执行结束后就已经死亡了, ...

局部内部类对象的引用也是和局部变量的生命周期是一致的啊,你不可能在方法外引用局部内部类吧。
作者: sgzqsw    时间: 2016-6-16 11:17
java25 发表于 2016-6-15 22:31
局部内部类对象的引用也是和局部变量的生命周期是一致的啊,你不可能在方法外引用局部内部类吧。 ...

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




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