EMM*_*EMM 9 java inner-classes
class Outer{
private String x = "instance variable";
void doStuff(){
String z = "local variable";
class Inner{
public void seeOuter(){
System.out.println("Outer x is : "+ x);
System.out.println("Local variable z is : " + z); //won't compile
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
将局部变量z标记为final可解决问题:
final String z = "local variable"; //Now inner object can use it.
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下发生了什么吗?
我确切地知道为什么在我尝试访问非最终局部变量的情况下它无法编译.
即使方法完成且局部变量超出范围,创建局部变量final也能保持活着吗?
最终的局部变量是否存储在堆而不是堆栈中?
Tar*_*rek 12
它们可以使用函数的局部变量和参数,但只能使用声明的函数,final因为本地类实例必须维护变量的单独副本,因为它可能会超出函数的范围.为了不在同一范围内混淆两个具有相同名称的可修改变量,该变量被强制为不可修改.
将局部变量 z 标记为 Final 可以解决问题:任何人都可以解释一下发生了什么吗?
您有一个方法局部类,允许在其创建的范围内访问最终局部变量。
即使方法完成并且局部变量超出范围,创建局部变量final是否允许它保持活动状态?
Final意味着它不能被改变。没有其他的。
最终局部变量是否存储在堆而不是堆栈上?
所有变量都在堆栈上分配,无论是否为最终变量。
我确切地知道为什么在我尝试访问非最终局部变量时它无法编译。
也许你应该考虑一下这一点,因为我根本不清楚情况是否如此。
嵌套类可以“访问”最终变量,因为这些变量会自动复制为对象的字段。它不支持非最终字段,因为它们可以通过方法或类进行更改,并且不支持这一点,因为实际上有两个不同的字段/变量。
| 归档时间: |
|
| 查看次数: |
8960 次 |
| 最近记录: |