创建对象[同一实例的多个]

时间:2010-10-19 22:54:29

标签: java android object matrix

我创建了一个Matrix对象(比如数学矩阵,例如4x4数字块)并且它工作正常,可以设置row,col,变量就好了,但是,我不能有多个相同的对象,我有它创建一个十几个Matrix对象的ArrayList,每个对象都有三个变量,但是当我调用changeVar(Matrix x,int变量)并刷新矩阵的打印输出时,它会将所有数字更改为我更改的变量至。所以看起来它只是一遍又一遍地创建相同的实例,如果你改变一个,它会改变它们,我是否遗漏了任何明显的东西?

public class Matrices {

    private static int row, col, value, newRow, newCol;

    public Matrices(int row, int col, int value) {
        this.value = value;
        this.row = row;
        this.col = col;
    }

    public static void setRow(int row) {
        Matrices.row = row;
    }

    public static void setValue(int value) {
        Matrices.value = value;
    }

    public static void setCol(int col) {
        Matrices.col = col;
    }

    public static int getCol(Matrices x) {
        return col;
    }

    public static int getRow(Matrices x) {
        return row;
    }

    public static int getValue(Matrices x) {
        return value;
    }

    public static Matrices changeValue(Matrices x, int value) {
        newRow = getRow(x);
        newCol = getCol(x);
        return new Matrices(newRow, newCol, value);
    }
}

3 个答案:

答案 0 :(得分:4)

问题是您使用“静态”关键字。

简短的回答是:删除所有静态关键字。

更长的答案是静态字段/方法不与类的任何特定实例相关联,因此您的代码所做的是设置一个名为“row”的字段,一个名为“col”等的字段并将其用于所有实例班上的。你真正想要的是每个实例一个字段:使字段非静态将实现这一点。

一般情况下,避免使用静态,除非你真的,真的是指它,即如果你想要一个单例类,或者你有一个不应该实例化的实用程序类。

答案 1 :(得分:2)

您正在使用静态成员。静态成员在所有实例中共享。

不要这样做:删除'static'关键字。

我很惊讶this.x = x行没有警告......

快乐编码

答案 2 :(得分:1)

类字段上的“static”修饰符(即row,col,value,newRow和newCol)表示每个CLASS而不是每个OBJECT都有一个这些变量的副本。

此外,您当前正在静态方法中修改这些静态值。除了删除类字段上的static修饰符之外,还需要删除方法上的静态修饰符,然后使用“this”访问对象的属性(字段)(如果字段与方法的参数具有相同的名称)。