为什么内部类访问局部变量需要加final修饰?
2017-04-09 09:40
225 查看
先看一段代码:
这是一个非常简单的执行线程的函数。
再来看,内部类的生命周期和方法体的生命周期并不相同,如果局部变量不是final类型会出现在这样一个问题。该方法体在1秒内执行完毕,即销毁name变量,那1秒后执行的内部类方法则取不到name变量了。
而局部变量被final修饰之后,此时会在内存中保有一份局部变得的复制品,当内部类访问的时候其实访问的是这个复制品。
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匿名内部类访问的外部局部变量或参数需要被final修饰
- 为什么匿名内部类和局部内部类只能访问被final修饰的局部变量?
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- 内部类访问局部变量时,为什么需要加final关键字
- 内部类访问局部变量的时候,为什么变量必须加上final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- java中内部类访问局部变量的时候,为什么变量必须加上final修饰
- 内部类访问局部变量的时候,为什么变量必须加上final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- 为什么方法中的内部类只能访问final修饰的局部变量
- 【面试对宝典40题的解释】为什么从内部类中访问局部变量需要被声明为final最终类型
- 为什么内部类访问的外部变量需要使用final修饰
- 内部类访问局部变量的时候,为什么变量必须加上final修饰(转)
- 内部类访问局部变量的时候,为什么变量必须加上final修饰
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- 为什么内部类访问的外部变量需要使用final修饰
- 局部内部类访问外部变量为什么需要使用final修饰
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- JavaSE8基础 局部内部类访问 用final修饰的局部变量
- [Java] 匿名内部类访问外部类的局部变量为什么一定得是final类型