您的位置:首页 > 编程语言 > Java开发

为什么内部类访问局部变量需要加final修饰?

2017-04-09 09:40 225 查看
先看一段代码:

public void myRun(final String name){
new Runnable() {

public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

e.printStackTrace();
}
System.out.println(name);
}
}.start();
}


这是一个非常简单的执行线程的函数。

再来看,内部类的生命周期和方法体的生命周期并不相同,如果局部变量不是final类型会出现在这样一个问题。该方法体在1秒内执行完毕,即销毁name变量,那1秒后执行的内部类方法则取不到name变量了。

而局部变量被final修饰之后,此时会在内存中保有一份局部变得的复制品,当内部类访问的时候其实访问的是这个复制品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐