2017-03-17 97 views
-1
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); 
} 
} 

有人能解释我是如何当它具有相同的名称作为构造函数中的局部变量没有参数和局部变量只初始化未初始化的变量的功能呢?我注意到,当我运行示例波纹管时,未初始化的实例变量采用本地变量的值,当我在主内部打印w1对象的大小值。 还有另一个问题。如果这发生在一个方法内而不是在构造函数内,这会改变吗? 在此先感谢。我是新来的java,所以要温柔。未初始化的实例变量取局部变量值(同名)的Java

+3

请缩进您的代码。 – weston

+0

它缩进了...我的英语不太好,所以如果你能解释的话 – Kjssplass

+0

你的代码全部在一个缩进级别,不符合Java编码规范。缩进你的代码的请求是为了解决这个问题,你还没有完成。你的代码在这里没有说明“局部变量只是初始化的”,也没有“未初始化的实例变量接受局部变量的值”。在任何情况下,代码中的实例变量都会被初始化。你也不会显示产出,也不会显示你的期望,也不会解释它们的不同之处。你的代码显示的是成员变量的初始化。 –

回答

0

我觉得你的困惑来源于这段代码:

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

的“大小”在这里是不是一个局部变量。你从未定义过一个。

相反,它是Windows成员变量!

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

+0

我删除了两个system.out.println,因为我把它们放在那里以查看区别。构造函数中的变量大小是局部变量吗? – Kjssplass

+0

好吧,我会编辑以使其更清晰 – ChrisB

+0

你是对的!我没有理解类成员变量和局部变量之间的区别。 – Kjssplass