除非标记了这些局部变量,否则在方法 内部 定义的 内部类
无法访问该方法的局部变量。final
我已经看过堆栈溢出和Java代码牧场中的其他文章,但它们似乎都无法准确回答标记的问题变量final允许内部类访问方法中的局部变量。
class MyOuter {
private String x = "Outer";
void fly(final int speed) {
final int e = 1;
class FlyingEquation {
public void seeOuter()
{
System.out.println("Outer x is " + x);
}
public void display()
{
System.out.println(e);// line 1
System.out.println(speed);// line 2
}
}
FlyingEquation f=new FlyingEquation();
f.seeOuter();
f.display();
}
public static void main(String args[])
{
MyOuter mo=new MyOuter();
mo.fly(5);
}
}
我发现的解释是:
局部变量 存储在堆栈中,方法调用完成后,将弹出堆栈,并且 局部变量 不可访问,而 最终局部变量 存储在
内存的数据部分中,JVM
即使在方法调用结束后,也可能允许访问它们。在哪里data section of memory
?我相信所有
final或not局部变量 都存储在堆栈中。从堆栈中删除该方法时,final变量也会随之删除。最终变量中的值是否与对象存储在堆中?
它不支持非最终字段,因为它们可以通过方法或类进行更改,并且不支持此设置,因为实际上有两个不同的字段/变量。
在内部类实例化期间,当方法和类都在范围内时,内部类将复制为常量的变量,这意味着方法可以超出范围,因为内部类仅使用变量的副本。
查看这篇文章。
在方法内部定义的内部类不能访问该方法的局部变量,除非这些局部变量被标记为。我看过stack-overflow和java code ranch中的其他文章,但它们似乎都没有确切地回答这样一个问题,即标记变量final如何允许内部类访问方法中的局部变量。 我对此的解释是: 局部变量存储在堆栈上,一旦方法调用结束,堆栈就会弹出,局部变量不可访问,而最终的局部变量存储在内存的数据部分中,这可能允许访问它们
但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。
我得到了一个问题,对内部类的局部变量访问需要声明为final。从方法createGrids()->“”中,i是一个需要声明为final的局部变量。我不知道为什么,我在字段中添加了final,但它并不起作用。 //略
我正在尝试创建一个布局为“是”或“否”的警报对话框。我想通过单击“否”按钮而不是对话框视图来关闭该对话框。Disclose() 有错误。 这是我的密码。
问题内容: 这不是直截了当的问题。在我的情况下,外部类变量和内部类setter方法的参数名称相同。喜欢: 现在,我无法初始化外部类实例变量p,因为它指示内部类。再次,我做不到它得到一个错误。现在如何分配外部p,同时将内部Class方法的参数命名为p? 问题答案: 这是您可以/应该这样做的方式:
这不是直截了当的问题。在我的例子中,外部类变量和内部类setter方法的参数名称是相同的。比如: 现在我不能用初始化外部类实例变量p,因为它指示内部类。同样,我不能执行会出现错误。现在,我如何分配外部p,使内部类方法的参数与名称p相同?