添加新数组时,数组会覆盖所有其他值

时间:2014-03-10 01:58:31

标签: java arrays

向阵列添加对象时遇到问题。似乎每次我向数组添加一个新的WoodFloor对象时,它都会覆盖数组的所有其他值。这是我的代码:

package code;

public class Main {

private static Block[] blocks = new Block[12];

public static void main(String[] args) {
    for(int i = 0; i < 12; i++) {
        blocks[i] = new WoodFloor(i * 10, i * 20);
    }
  }
}



package code;

public class Block {

protected static int x, y;

public Block(int x, int y) {
    this.x = x;
    this.y = y;
}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

}


package code;

public final class WoodFloor extends Block {

public WoodFloor(int x, int y) {
    super(x, y);
}

}

4 个答案:

答案 0 :(得分:2)

不要对每个实例需要不同的类字段使用static修饰符。 static修饰符使字段成为一个类字段,一个有效地由所有实例共享的字段,这不是你想要的。

所以改变这个:

protected static int x, y;

到此:

protected int x, y;

答案 1 :(得分:2)

您的程序会生成12个不同的对象,但它们都引用同一对xy。问题出在这一行:

protected static int x, y;
//        ^^^^^^

当您创建字段static时,您说该字段的值在类的每个单个对象中都是相同的。这绝对不是您要在此处实现的目标:您需要每个WoodFloor拥有自己的xy。为此,您使用实例字段(即没有static声明的字段)。

答案 2 :(得分:0)

静态使类变量可用于类杠杆,因此不需要实例来访问它。这里每次都有效地将其重置为原始值,而不是移动到下一个数组位置并忘记旧数组。

答案 3 :(得分:0)

我怀疑它是x和y的'static'关键字。