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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suifeng1987 中级黑马   /  2016-8-22 02:51  /  656 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么局部内部类访问局部变量时候,局部变量必须要用final修饰??谁能详细的说一下如果不修饰会怎么样来着?

5 个回复

倒序浏览
局部内部类定义在方法中,给方法中的局部变量加上final修饰是为了延长局部变量的生命周期,如果不加final修饰的话,方法结束时局部内部类还会存在,而局部变量随方法的消失而消失,故需要加上final修饰
回复 使用道具 举报
来看看,长见识了
回复 使用道具 举报
当调用方法时,方法的局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的
当方法弹栈,这个局部变量也会消失,
如果局部内部类对象还没有马上消失,然后继续想使用这个局部变量,就会无法找到,
如果用final修饰局部变量会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用

JDK8以前不加会编译失败。
回复 使用道具 举报
suifeng1987 来自手机 中级黑马 2016-8-23 09:21:20
报纸
阿卜 发表于 2016-8-22 12:36
当调用方法时,方法的局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的
当方法弹栈,这个 ...

解答的很详细,明白了谢谢兄弟
回复 使用道具 举报
从生命周期的角度,——>作用域决定局部变量的生命周期——>当作用域结束后局部变量就会消亡便称为垃圾,——>这样就会影响到存在其他类对它的调用,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马