我目前正在編寫一個java程序,我得到的結果似乎很奇怪。我構建類SimulatedExchange,它具有以下構造的對象:爲什麼我新建的物體看起來是相同的?
public class SimulatedExchange {
public static String exchangeName;
SimulatorData sim;
public static double Fee;
public static Limit buyLimit;
public static Limit sellLimit;
public SimulatedExchange(String exchangename, SimulatorData simdata){
exchangeName = exchangename;
sim = simdata;
if (exchangename.contentEquals("Exchange1")) Fee = .005;
if (exchangename.contentEquals("Exchange2")) Fee = .0055;
if (exchangename.contentEquals("Exchange3")) Fee = .002;
buyLimit = new Limit();
sellLimit=new Limit();
}
我的主類看起來是這樣的:
public static void main (String[] args){
SimulatorData fake = new SimulatorData("c:/users/el nico/documents/SimulatorData.xls");
SimulatedExchange Exchange1 = new SimulatedExchange("Exchange1", fake);
SimulatedExchange Exchange2 = new SimulatedExchange("Exchange2", fake);
SimulatedExchange Exchange3 = new SimulatedExchange("Exchange3", fake);
System.out.println("1st exchange name: " + Exchange1.exchangeName);
System.out.println("2nd exchange name: " + Exchange2.exchangeName);
System.out.println("3rd exchange name: " + Exchange3.exchangeName);
}
凡SimulatorData對象包含數據的ArrayList它從文件讀取施工時。
我得到以下輸出:
1日交換名稱:Exchange3
第二交換名稱:Exchange3
第三交換名稱:Exchange3
這奇怪的是我,因爲我在SimulatedExchange對象名稱Exchange1,Exchange2和Exchange3的三個不同構造函數中輸入了不同的字符串,所以我會認爲構造函數會將它們的每個exchangeName屬性設置爲di fferently。我對Java有點新鮮,我不確定爲什麼這可能不會發生。我不認爲我將不同Exchange的地址設置爲指向堆中的同一個對象,因爲我每次都在構造一個新對象。
我注意到的一件事是對象具有正確的exchangeName屬性(以及所有其他屬性),因此這意味着只有在構造相同類的另一個對象時纔會更改它。這表明Exchange1,Exchange2和Exchange3都指向堆中的同一個對象。但我不明白爲什麼會發生這種情況。
任何有識之士將不勝感激!如果答案非常明顯,我很抱歉,這似乎是肯定的。我似乎無法找出問題所在。 謝謝,保羅
哇,我老實說永遠不會明白到目前爲止靜態意味着什麼。這完全清除了。謝謝你 – Paul