我目前正在编写一个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();
}
Run Code Online (Sandbox Code Playgroud)
我的主要课程如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
SimulatorData对象包含数据的ArrayList,它在构造时从文件中读取.
我得到以下输出:
第一个交易所名称:Exchange3
第二个交易所名称:Exchange3
第三交换名称:Exchange3
这对我来说很奇怪,因为我已经为SimulatedExchange对象名称Exchange1,Exchange2和Exchange3的三个不同构造函数输入了不同的字符串,所以我认为构造函数会以不同方式设置每个exchangeName属性.我对java有点新,我不确定为什么这可能不会发生.我不认为我将不同Exchange的地址设置为指向堆中的同一对象,因为我每次都在构造一个新对象.
我注意到的一件事是,对象在构造之后具有正确的exchangeName属性(以及所有其他属性),因此这意味着只有在构造同一类的另一个对象时才会更改它.这告诉我,Exchange1,Exchange2和Exchange3都指向堆中的同一个对象.但我不明白为什么会发生这种情况.
任何见解将不胜感激!如果答案非常明显,我会提前道歉,这似乎是必须的.我似乎无法确定问题所在.谢谢,保罗
你已经exchangeName设置为static.这意味着exchangeName无论SimulatedExchange你有多少个实例,都只会有一个实例.使它非静态.另外,this在构造函数中添加实例变量,例如this.exchangeName = exchangename;.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |