匿名内部类为什么有时候引用外部成员需要final

这里草草讲一下


是生命周期的问题

比较容易出现在

listener中

runnable中


原因:

生命周期的问题


listener的代码,和runnable的代码,就算你放在方法的局部,他脱离了方法,依然可以执行。

但是另外的代码不行,他们的生命周期就停留在这个方法作为栈帧在方法栈的时候,方法执行完了就要挂掉了


所以解决方法采用final。栈帧内有一个局部变量表,在栈帧出栈时就不复存在。如果不采用final,引用和对象之间的联系将会被清理,但是如果加了final,就不会被清理了


但是这样不会内存泄漏吗?

考虑一个可达性算法。目前可达性是通过listener或者是runnable通向这里的,一般listener或者runnable失效了,那么他们这个整体gc  roots就不可达了,自然会被回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值