所以我有一个名为Hero的课程:
public class Hero {
public static int x;
public static int y;
Hero() {
x=0;
y=0;
}
Hero(int x, int y) {
this.x = x;
this.y = y;
}
public Hero(Hero h) {
this(h.x, h.y);
}
}
我制作了一系列英雄。但是,当我改变英雄[0]时,英雄[1]和所有其他人也会改变。另外,当我创造另一个英雄时,像这样:
Hero guy = new Hero();
并改变他的x:
guy.x = 4;
突然我创建的所有Hero对象的x值都为4.
同一项目中的另一个例子:
import javax.swing.JMenuItem;
public class bonusItem extends JMenuItem{
public static int X;
public static int Y;
bonusItem(String s, int x, int y) {
super(s);
X=x;
Y=y;
}
public void setCols(int cols) {
X = cols;
}
public void setRows(int rows) {
Y = rows;
}
public int getCols() {
return X;
}
public int getRows() {
return Y;
}
}
如果我这样做(当然是在制作阵列之后):
bonus[1].setRows(9);
bonus[1].setCols(9);
bonus[0].setRows(8);
bonus[0].setCols(8);
for(int i=0; i<bonusCount; i++)
System.out.println("Bonus " + i + " has " +
bonus[i].getRows() + " rows and "
+ bonus[i].getCols() + " columns.");
输出是: 奖金0有8行8列。 奖金1有8行8列。
我真的只想拥有一系列离散对象,而不是这里发生的任何事情。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:6)
这个问题是static
现象的经典解释。
public static int x;
public static int y;
使用static
你怎么能期望你可以为不同的对象设置不同的值?
static
成员是针对类本身的,它们不依赖于任何单个对象。因此static
即使您有数百个对象,也会保持相同的值。
有时,您希望拥有所有对象共有的变量。 这是通过静态修改器完成的。有的领域 声明中的static修饰符称为静态字段或类 变量。他们与班级有关,而不是与班级有关 宾语。该类的每个实例都共享一个类变量,即 在内存中的一个固定位置。任何对象都可以更改a的值 类变量,但类变量也可以在没有的情况下进行操作 创建一个类的实例。
你应该宣布他们像
private int x; // or public like you did
private int y;