未初始化的实例变量取局部变量值(同名)java

Uninitialized instance variable takes local variable value (same name) java

public class Window
{
protected int size;
public Window()
{
size=1;
System.out.println("Window size="+size);
}
public Window(int size)
{
this.size=size;
System.out.println("Window size="+size);
}
public void setSize(int x)
{size += x;}
public void printSize()
{System.out.println("Size=" + size);}
}

public class RunWindow
{
public static void main (String[] args)
{
Window w1=new Window();
Window w2=new Window(2);
System.out.println(w1.size);
System.out.println(w2.size);
}
}

谁能解释一下当未初始化的变量与构造函数中没有参数的局部变量同名并且局部变量仅被初始化时,它是如何工作的?我注意到当我 运行 下面的例子中,当我在 main 中打印 w1 对象的大小值时,未初始化的实例变量采用局部变量的值。 还有一个问题。如果这发生在方法内部而不是构造函数内部,这会改变吗? 提前致谢。我是 java 的新人,所以要温柔。

我认为您的困惑来自这段代码:

public Window()
{
    size=1; //this call changes your Windows member variable!
            //it is identical to this.size = 1;
}

这里的'size'不是局部变量。你从来没有定义过一个。

而是Windows成员变量!

other函数中的this.size只是因为名称冲突才需要的。 当没有局部变量 'overriding' 时,可以(通常会)省略 'this.'。