public class Arpan
{
String arpan;
public void arpan()
{
String arpan;
arpan = "myname";
}
public void sen()
{
arpan = "myname";
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在执行函数arpan期间没有问题,即使String变量与arpan具有相同的名称.
请解释在执行程序期间如何创建变量.
这被称为"阴影".
然而,在我们开始之前,让我们只使用arpan这两个问题,因为使用该名称的方法(并使用Arpan类名)会让人感到困惑.:-)让我们来代替这个代码:
public class Foo
{
String arpan;
public void method1()
{
String arpan;
arpan = "myname";
}
public void method2()
{
arpan = "myname";
}
}
Run Code Online (Sandbox Code Playgroud)
该arpan变量method1是一个局部变量.使用该arpan方法中的自由符号将引用该变量,因为该变量会影响实例字段.
使用arpan里面的自由符号method2将使用声明的arpan实例字段(它不是"变量")Foo,因为它没有被局部变量遮蔽.
一般来说,可以这样想:编译器在当前范围内查找符号,如果找不到,则查看包含范围,依此类推.更JLS§6.4.1:阴影.
主观上,我总是倾向于通过this.在它们前面使用实例字段和方法来明确表达,因此无论我是指实例字段还是变量,都没有歧义.许多工具可以配置为要求即使Java(语言)不这样做.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |