所以我有一门课叫做“英雄”
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);
}}
我制作了一组英雄。然而,当我改变英雄的时候,hero1和其他人也都变了。另外,当我成为另一个英雄时,就像这样:
Hero guy = new Hero();然后像这样改变他的x:
guy.x = 4;突然间,我创建的所有英雄对象的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列。
我真的很想要一组离散的物体,而不是这里发生的任何事情。任何帮助都将不胜感激。谢谢!
发布于 2013-11-25 03:22:13
这个问题是对static现象的经典解释。
public static int x;
public static int y;使用static,您怎么会期望对不同的对象有不同的值?
static成员是类本身的成员,它们不绑定到任何单个对象。因此,即使有数百个对象,static也将保持相同的值。
来自文档
有时,您希望拥有对所有对象都通用的变量。这是通过静态修饰符来完成的。声明中具有静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
你应该宣布他们
private int x; // or public like you did
private int y;https://stackoverflow.com/questions/20184170
复制相似问题