Java 对不同变量具有相同名称的特定情况的混淆
为什么即使字符串变量与arpan同名,在执行函数arpan的过程中也没有问题Java 对不同变量具有相同名称的特定情况的混淆,java,scope,Java,Scope,为什么即使字符串变量与arpan同名,在执行函数arpan的过程中也没有问题 请解释在程序执行期间如何创建变量。方法中声明的变量仅在该方法中可用。要在该方法中引用类级变量,需要使用此.arpan。方法中声明的变量仅在该方法中可用。要在该方法中引用类级别变量,需要使用此.arpan。这称为“阴影” 不过,在开始之前,让我们先用arpan来表示这两个问题,因为使用该名称的方法(并使用arpan作为类名)会让人困惑。:-)让我们参考以下代码: public class Arpan { String
请解释在程序执行期间如何创建变量。方法中声明的变量仅在该方法中可用。要在该方法中引用类级变量,需要使用此.arpan。方法中声明的变量仅在该方法中可用。要在该方法中引用类级别变量,需要使用此.arpan。这称为“阴影” 不过,在开始之前,让我们先用
arpan
来表示这两个问题,因为使用该名称的方法(并使用arpan
作为类名)会让人困惑。:-)让我们参考以下代码:
public class Arpan
{
String arpan;
public void arpan()
{
String arpan;
arpan = "myname";
}
public void sen()
{
arpan = "myname";
}
}
method1
中的arpan
变量是一个局部变量。在该方法中使用自由符号arpan
将引用变量,因为变量会遮挡实例字段
使用method2
内部的自由符号arpan
将使用Foo
中声明的arpan
实例字段(它不是“变量”),因为它不受局部变量的影响
通常,可以这样想:编译器在当前作用域中查找符号,如果找不到,则查找包含的作用域,依此类推。更多
主观上,在引用实例字段和方法时,我总是倾向于使用前面的
this.
来显式地引用它们,这样无论我引用的是实例字段还是变量,都不会有歧义。许多工具可以配置为需要,即使Java语言不需要。这称为“阴影”
不过,在开始之前,让我们先用arpan
来表示这两个问题,因为使用该名称的方法(并使用arpan
作为类名)会让人困惑。:-)让我们参考以下代码:
public class Arpan
{
String arpan;
public void arpan()
{
String arpan;
arpan = "myname";
}
public void sen()
{
arpan = "myname";
}
}
method1
中的arpan
变量是一个局部变量。在该方法中使用自由符号arpan
将引用变量,因为变量会遮挡实例字段
使用method2
内部的自由符号arpan
将使用Foo
中声明的arpan
实例字段(它不是“变量”),因为它不受局部变量的影响
通常,可以这样想:编译器在当前作用域中查找符号,如果找不到,则查找包含的作用域,依此类推。更多
主观上,在引用实例字段和方法时,我总是倾向于使用前面的
this.
来显式地引用它们,这样无论我引用的是实例字段还是变量,都不会有歧义。许多工具可以配置为需要,即使Java语言不需要。Java允许您这样做。编译器从使用标识符的上下文中知道它是方法名还是变量名。当您编写arpan=“myname”
时,编译器知道您引用了一个变量。当您编写arpan()
时,编译器知道您引用了一个方法。语法的设计方式确保这两种上下文不会出错,即没有允许“直接”调用的变量类型,也没有可以直接为其分配方法名的变量
Java还允许局部变量“隐藏”具有相同名称的类级变量。请注意,始终可以使用this.arpan
语法访问阴影变量
你能做到这一点并不意味着你应该做到这一点。除了一些特殊情况外,这会导致代码更难理解和维护。Java允许您这样做。编译器从使用标识符的上下文中知道它是方法名还是变量名。当您编写
arpan=“myname”
时,编译器知道您引用了一个变量。当您编写arpan()
时,编译器知道您引用了一个方法。语法的设计方式确保这两种上下文不会出错,即没有允许“直接”调用的变量类型,也没有可以直接为其分配方法名的变量
Java还允许局部变量“隐藏”具有相同名称的类级变量。请注意,始终可以使用this.arpan
语法访问阴影变量
你能做到这一点并不意味着你应该做到这一点。除了一些特殊情况外,这会导致代码更难理解和维护。没有问题,因为在
arpan()
中定义的arpan
是一个局部变量,在java中定义与类变量同名的局部变量非常有效,它被称为没有问题,因为在arpan()
中定义的arpan
是一个局部变量,在java中定义与类变量同名的局部变量非常有效,它被称为@ajb:谢谢!!哇,我不知道这一点,但我想我应该知道,Java使域保持相当独立。@ajb:谢谢!!哇,我不知道这一点,但我想我应该知道,Java使域保持相当独立。