黑马程序员技术交流社区

标题: 内部类问题 [打印本页]

作者: 海贼王019    时间: 2015-4-7 15:49
标题: 内部类问题
为什么黄色框框的地方一定要用final修饰,我想知道原因啊

2015-04-07_154802.png (15.69 KB, 下载次数: 110)

2015-04-07_154802.png

作者: wenke    时间: 2015-4-7 16:00
jdk1.8  你不写final同样能通过 自己试试
作者: 海贼王019    时间: 2015-4-7 16:04
wenke 发表于 2015-4-7 16:00
jdk1.8  你不写final同样能通过 自己试试

哦 我们让用的是1.6还是1.7我给忘了,所以不懂
作者: long_yihuan    时间: 2015-4-7 16:10
应该没啥问题啊
作者: 邓熊财    时间: 2015-4-7 19:34
内部类定义在局部方法中时,内部类只能访问局部被final修饰的常量,不被final修饰你的内部类是无法调用sum1的!
作者: 王小乖    时间: 2015-4-7 21:03
一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,
           直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量。
                        
   二,解决这一问题的办法就是使用final修饰局部变量,通过将final局部变量"复制"一份,
         复制品直接作为方法内部类中的数据成员,这事方法内部类访问的其实是这个局部变量的复制品!
         而且,由于被final修饰的变量赋值后不能再修改,所以就保证了复制品与原始变量的一致。
作者: 火七君    时间: 2015-4-7 21:21
同意楼上
作者: Chenli    时间: 2015-4-7 21:25
用final修饰后,全局变量
作者: 风飘逸    时间: 2015-4-7 21:28
因为局部方法在用完后就在内存中消失,而此时局部内部类因为存在栈中,其不会立即消失而是要等待垃圾回收器回收。也就是说:内部类还存在,输出语句还存在,还要用到sum1。所以把sum1用final修饰,存放在常量池中,提高sum1的声明周期
作者: 海贼王019    时间: 2015-4-10 21:50
王小乖 发表于 2015-4-7 21:03
一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,
           直到没有被引 ...

谢谢你的分析,挺好的
作者: 海贼王019    时间: 2015-4-10 21:51
风飘逸 发表于 2015-4-7 21:28
因为局部方法在用完后就在内存中消失,而此时局部内部类因为存在栈中,其不会立即消失而是要等待垃圾回收器 ...

常量池我第一次听说,不要说我菜啊




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