NIN*_*OOP 14 java local-variables inner-classes
为什么我需要声明local variable的final,如果我的Inner class方法中定义需要使用它?
示例:
class MyOuter2 {
private String x = "Outer2";
void doStuff() {
final String y = "Hello World";
final class MyInner {
String z = y;
public void seeOuter() {
System.out.println("Outer x is "+x);
System.out.println("Local variable is "+y);
MyInner mi = new MyInner();
mi.seeOuter();
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
为什么String y需要是最终常量?它是如何影响的?
mpr*_*hat 16
局部变量总是存在于堆栈中,当时方法已经超过所有局部变量都消失了.
但是即使在方法结束之后你的内部类对象也可能在堆上(假设一个实例变量保留在引用上),所以在这种情况下它不能访问你的局部变量,因为它们已经消失了,除非你把它们标记为final
Con*_*Del 13
答案是两者在不同的范围内.因此,在内部类访问它之前,该变量可能会发生变化.使其成为最终阻止.
这是因为函数内部的类实际上是复制局部变量,因为在本地类的实例仍然存在的情况下,函数调用之后可能会销毁局部变量.要使局部变量的两个副本始终具有相同的值(使它们看起来相同),您必须将变量声明为final.
| 归档时间: |
|
| 查看次数: |
11822 次 |
| 最近记录: |