繁体   English   中英

Java 将类的变量与类的另一个实例混淆

[英]Java confuses variables of a class with another instance of a class

我正在创建一个让生物互相争斗的程序。 我有一个名为 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,它也会改为使用 Creature 类的最新实例。 我相信正在发生的事情是 Java 正在替换 c 的变量。 我能做些什么来解决这个问题?

您的问题显然出在您实例化(创建)名为b的第二个Creature对象的代码行上。 由于您没有发布Creature的构造函数,我猜在构造函数中您分配了传递给静态变量的值。 每个类的每个应用程序域都有一个静态变量。

所以这就是为什么你会得到不同的结果。 无论您调用哪个对象,静态变量都会发生变化。 因此,第二次调用构造函数将覆盖您刚刚分配给静态变量的值。

现在你可以尝试创建另一个Creature并调用

c.getStats()

再次,你会看到不同的结果。

要解决这个问题,您需要进入Creature类并查找存储生物统计数据的变量。 应该有一个词“ static ”。 你应该删除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM