为什么下面的代码可以编译成功?
第二个语句int a = 2只是在范围内定义int a = 2,为什么它可以成功编译?
class Test {
int a = 1; // variable a,
{
int a = 2; //duplicate variable
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Test().a);
}
}
Run Code Online (Sandbox Code Playgroud)int a = 2;是实例初始化程序块的局部变量.因此,它Test作为局部变量添加到类的每个构造函数的主体中.允许局部变量与实例变量具有相同的名称(例如,这允许您具有其参数名称与相应实例变量的名称相同的构造函数).它们只是隐藏同名的实例变量(this.如果要引用实例变量,则强制您使用名称限定).
class Test {
int a = 1;
{
int a = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
相当于:
class Test {
int a = 1;
public Test ()
{
int a = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这个片段没有任何意义(因为我们从不使用局部变量的值a),但是a在下面的示例中有2个变量命名(一个是局部变量,另一个是实例变量)是有意义的:
class Test {
int a = 1;
public Test (int a)
{
this.a = a;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34 次 |
| 最近记录: |