我正在制作一个让生物互相争斗的程序。我有一个名为Creature的类,它分别对攻击,速度和健康采用整数输入。 每当我尝试创建一个Creature类的新实例,并尝试使用方法引用它时,它认为我在谈论的是该类的最新实例。
Creature c = new Creature(1,2,3);
c.getStats();
打印出攻击:1速度:2生命值:3
但是,如果我创建一个新的生物......
Creature c = new Creature(1,2,3);
c.getStats();
Creature b = new Creature(9,9,9);
c.getStats();
如你所见,我两次引用同一个生物。但是,我得到了不同的结果。即使我明确说明我正在谈论的生物是c,它也会转向生物类的最新实例。我相信正在发生的事情是Java正在用c替换c的变量。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
您的问题显然在您实例化(创建)名为Creature
的第二个b
对象的代码行上。由于您没有发布Creature
的构造函数,我猜您在构造函数中指定了传递给 static 变量的值。每个类每个应用程序域都有一个静态变量。
这就是为什么你会得到不同的结果。无论您调用哪个对象,静态变量都会发生变化。因此,第二次调用构造函数将覆盖刚刚分配给静态变量的值。
现在,您可以尝试创建另一个Creature
并致电
c.getStats()
再次,你会看到不同的结果。
要解决此问题,您需要进入Creature
课程并查找存储生物统计数据的变量。应该有一个单词“static
”。你应该删除它。