内部类调用局部参数为何用final关键字
来源:互联网 发布:石家庄手机数据恢复 编辑:程序博客网 时间:2024/05/17 13:10
public void mRun(final String name){ new Runnable() { public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name); } }.start(); }这种代码相信大家写过很多,当内部类访问局部变量的时候,需要在局部变量前加final修饰符,不然编译器就会报错。通常我们也是这么干的。好的,第二个问题来了,为什么要加final修饰符?相信大多数小伙伴都没有思考过这个问题,但凡使用的时候,直接加上就得了,从来没去深究过其中的原理。这对于一个优秀的程序员来说是不可取,我们不仅要知其然还要知其所以然。
现在我们来分析一下,为什么要加final关键字。首先内部类的生命周期是成员级别的,而局部变量的生命周期实在方法体之类。也就是说会出现这样一种情况,当mRun方法执行,new 的线程运行,新线程里面会睡一秒。主线程会继续执行,mRun执行完毕,name属性生命周期结束。1秒之后,Syetem.out.printh(name)执行。然而此时name已经寿终正寝,不在内存中了。Java就是为了杜绝这种错误,严格要求内部类中方位局部变量,必须使用final关键字修饰。局部变量被final修饰之后,此时会在内存中保有一份局部变得的复制品,当内部类访问的时候其实访问的是这个复制品。这就好像是把局部变量的生命周期变长了。说到底还是Java工程师提前把这个坑给我们填了,不然不知道又会有多少小伙伴会为了内部类局部变量而发愁了。
阅读全文
0 0
- 内部类调用局部参数为何用final关键字
- 为什么匿名内部类调用的方法内局部变量必须为final
- 为什么匿名内部类调用的方法内局部变量必须为final
- 为什么匿名内部类调用的方法内局部变量必须为final
- 为什么匿名内部类调用的方法内局部变量必须为final
- 关于匿名内部类使用final关键字修饰参数列表
- 局部内部类访问final局部变量
- 局部内部类访问final局部变量
- 为什么局部内部类访问局部变量,局部变量必须声明为final?
- 为什么匿名内部类和局部内部类只能访问final类型参数
- Java 局部内部类访问局部变量必须加 final 关键字
- Java 局部内部类访问局部变量必须加final关键字
- java 内部类 final关键字
- 初始化匿名内部类的参数必须为final类型
- 为什么匿名内部类参数必须为final类型
- 为什么匿名内部类参数必须为final类型
- 为什么匿名内部类参数必须为final类型
- 为什么匿名内部类参数必须为final类型
- 美国签证B2旅游所需材料清单
- 全局变量的替换方式
- Thinkphp5学习(35)图像处理
- Xcode无法启动虚拟机项目DTAssetProviderService... DTXConnection...
- 漫画告诉你什么是DDoS攻击?
- 内部类调用局部参数为何用final关键字
- struts2 之ognl表达式与值栈(03)
- SpringMVC札集(01)——SpringMVC入门完整详细示例(上)
- 【宏观】长期中的通货膨胀与货币
- Activity的4种启动模式
- 输入框延时调接口(防止不停调用)
- js怎么让浏览器自动全屏显示
- viewpager布局复用中FragmentPagerAdapter的坑,源码分析,控件id的一些思考
- AtomicInteger源码分析