2012-07-06 207 views
1

我不太知道該怎麼稱呼它,但本質上,當我運行這段代碼:Java對象從另一個實例中獲取變量?

public class test { 

    static Device one; 
    static Device two; 

    public static void main(String[] args) throws Exception { 

     one = new Device("One", "ONE"); 
     System.out.println(one.getName()); 
     two = new Device("Two", "TWO"); 

     System.out.println(one.getName()); 
     System.out.println(two.getName()); 

    } 
} 

輸出是:

ONE 
TWO 
TWO 

當它應該是:

ONE 
ONE 
TWO 

設備對象非常簡單,它只接收兩個字符串,第二個是我要求它打印的「名稱」。我之前做過OOP,但我覺得我只是忘記了一些重要的方面,但似乎無法弄清楚。任何幫助表示讚賞,謝謝!

這裏是設備的構造函數:

public Device(String iP, String Name) { 
    //Set the IP address 
    IP = iP; 
    //Set the device's name 
    name = Name; 
    // Set the string version of the device (for transmitting) 
    stringVersion = IP + ";" + name; 
} 
+4

如果你可以打印設備的構造函數,它會幫助我們回答。 – BlackVegetable 2012-07-06 16:02:39

+2

顯示整個設備類。 IP和名稱是靜態的嗎? – assylias 2012-07-06 16:05:27

+0

是的,他們非常感謝你。我忘了那個......再次感謝! – kakonsan 2012-07-06 16:07:32

回答

8

看起來你已經使用static字段Device了。這些不是實例字段。應避免使用可變的static字段。

+0

是的,你是對的,非常感謝你,不敢相信我沒有注意到... – kakonsan 2012-07-06 16:08:01

0

從評論:

顯示整個設備類。 IP和名稱是靜態的嗎? - assylias 2分鐘 前

是的,他們是

當你實例化Device一個新實例,這就是爲什麼你這種行爲,您的設備靜態成員得到重新初始化。你可以有onetwo作爲static,但你不應該有可變的成員變量static

相關問題