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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海贼王019 中级黑马   /  2015-4-7 15:49  /  623 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么黄色框框的地方一定要用final修饰,我想知道原因啊

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

2015-04-07_154802.png

10 个回复

正序浏览
风飘逸 发表于 2015-4-7 21:28
因为局部方法在用完后就在内存中消失,而此时局部内部类因为存在栈中,其不会立即消失而是要等待垃圾回收器 ...

常量池我第一次听说,不要说我菜啊
回复 使用道具 举报
王小乖 发表于 2015-4-7 21:03
一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,
           直到没有被引 ...

谢谢你的分析,挺好的
回复 使用道具 举报
因为局部方法在用完后就在内存中消失,而此时局部内部类因为存在栈中,其不会立即消失而是要等待垃圾回收器回收。也就是说:内部类还存在,输出语句还存在,还要用到sum1。所以把sum1用final修饰,存放在常量池中,提高sum1的声明周期
回复 使用道具 举报
用final修饰后,全局变量
回复 使用道具 举报
同意楼上
回复 使用道具 举报
一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,
           直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量。
                        
   二,解决这一问题的办法就是使用final修饰局部变量,通过将final局部变量"复制"一份,
         复制品直接作为方法内部类中的数据成员,这事方法内部类访问的其实是这个局部变量的复制品!
         而且,由于被final修饰的变量赋值后不能再修改,所以就保证了复制品与原始变量的一致。
回复 使用道具 举报
内部类定义在局部方法中时,内部类只能访问局部被final修饰的常量,不被final修饰你的内部类是无法调用sum1的!
回复 使用道具 举报
应该没啥问题啊
回复 使用道具 举报
wenke 发表于 2015-4-7 16:00
jdk1.8  你不写final同样能通过 自己试试

哦 我们让用的是1.6还是1.7我给忘了,所以不懂
回复 使用道具 举报
jdk1.8  你不写final同样能通过 自己试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马