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

时间:2017-03-17 19:57:54

标签: java variables initialization instance local

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的新手,所以要温柔。

1 个答案:

答案 0 :(得分:0)

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

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

此处的'size'不是局部变量。你从未定义过一个。

相反,它是Windows成员变量!

由于名称冲突,其他函数中的this.size只是必需的。 当没有局部变量'覆盖'时,比'this'。可以(通常会)被省略。