【问题标题】:Uninitialized instance variable takes local variable value (same name) java未初始化的实例变量采用局部变量值(同名)java
【发布时间】:2017-03-17 19:57:53
【问题描述】:
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新手,所以要温柔。

【问题讨论】:

  • 请缩进您的代码。
  • 它是缩进的……我的英文不太好,如果你能解释一下
  • 您的代码都在一个缩进级别,不符合 Java 编码约定。缩进代码的请求是为了解决这个问题,而您还没有这样做。您在此处的代码并未说明“仅初始化局部变量”或“未初始化的实例变量采用局部变量的值”。在每种情况下,代码中的实例变量都会被初始化。您也没有显示输出,也没有显示您的预期,也没有解释它们的不同之处。您的代码显示的是成员变量的初始化。
  • 我的问题在下面得到了回答。我可以添加输出,但我不明白局部变量和实例变量定义之间的区别。所以我的标题是错误的,对代码的理解也是错误的。我可以删除整个问题,但我的帐户会出现问题。

标签: java variables initialization instance local


【解决方案1】:

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

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

这里的“大小”不是局部变量。你从来没有定义过。

相反,它是 Windows 成员变量!

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

【讨论】:

  • 我删除了两个 system.out.println 因为我把它们放在那里看看有什么不同。构造函数内部的变量大小是局部变量吗?
  • 你是对的!我没有理解类成员变量和局部变量的区别。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多