内部类使用final外部变量
2017-06-23 11:26
344 查看
内部类访问局部变量的时候,变量必须加上final修饰。局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。(不管变量是不是final,他的生命周期都在于{}中),
class Outer{
public static void main(String[] args){
Outer out = new Outer();
Object obj = out.method();
}
Object method(){
int locvar = 1;
class Inner{
void displayLocvar(){
System.out.println("locvar = " + locvar);
}
}
Object in = new Inner();
return in;
}}
当out.method()方法执行结束后,局部变量 locvar 就消失了,但是在method()方法中 obj in = new Inner() 产生的 in 对象还存在引用obj,即内部类对象的生命周期会超过局部变量的生命期。使用final修饰局部变量,方法调用结束,所有的局部变量(含final)全死亡了。但是局部内部类对象中有final型局部变量的拷贝,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。
class Outer{
public static void main(String[] args){
Outer out = new Outer();
Object obj = out.method();
}
Object method(){
int locvar = 1;
class Inner{
void displayLocvar(){
System.out.println("locvar = " + locvar);
}
}
Object in = new Inner();
return in;
}}
当out.method()方法执行结束后,局部变量 locvar 就消失了,但是在method()方法中 obj in = new Inner() 产生的 in 对象还存在引用obj,即内部类对象的生命周期会超过局部变量的生命期。使用final修饰局部变量,方法调用结束,所有的局部变量(含final)全死亡了。但是局部内部类对象中有final型局部变量的拷贝,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。
相关文章推荐
- 内部了使用外部类的局部变量,这个局部变量必须用final修饰
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- 匿名内部类使用的外部变量为什么要是final的
- 【Java】内部类访问的外部变量定义成final (数据保持一致,外部修改后无法通知内部,编译的时候会通过构造方法传进来) Java内部类一般访问不了外部变量
- JAVA 方法内部类为何只能访问外部final类型变量
- 匿名内部类 使用外部的变量为什么要声明成final
- 如何突破java内部访问外部变量为final的限制?
- 为什么内部类访问的外部变量需要使用final修饰
- 匿名内部类使用的外部变量为什么要是final
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- 匿名内部内访问外部内局部变量必须是final
- js使用闭包时,内部函数是直接访问外部函数的实际变量而非复制一份新变量
- 内部类访问的外部变量需要使用final修饰解释原因
- 解析——java匿名内部类使用外部变量时,外部变量必须是final
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- 匿名内部类 使用外部的变量为什么要声明成final
- 局部内部类访问外部变量为什么需要使用final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- java 匿名类访问外部变量要使用final
- 使用匿名内部类,隐式调用外部变量,外部变量需要final修饰