首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当创建一个对象数组时,当我更改一个对象的属性时,它们都会发生变化。

当创建一个对象数组时,当我更改一个对象的属性时,它们都会发生变化。
EN

Stack Overflow用户
提问于 2013-11-25 03:19:22
回答 1查看 80关注 0票数 3

所以我有一门课叫做“英雄”

代码语言:javascript
复制
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和其他人也都变了。另外,当我成为另一个英雄时,就像这样:

代码语言:javascript
复制
Hero guy = new Hero();

然后像这样改变他的x:

代码语言:javascript
复制
guy.x = 4;

突然间,我创建的所有英雄对象的x值都为4。

在同一项目中的另一个例子:

代码语言:javascript
复制
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;
}

}

如果我这样做(当然是在创建数组之后):

代码语言:javascript
复制
    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列。

我真的很想要一组离散的物体,而不是这里发生的任何事情。任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 03:22:13

这个问题是对static现象的经典解释。

代码语言:javascript
复制
public static int x;
public static int y;

使用static,您怎么会期望对不同的对象有不同的值?

static成员是类本身的成员,它们不绑定到任何单个对象。因此,即使有数百个对象,static也将保持相同的值。

来自文档

有时,您希望拥有对所有对象都通用的变量。这是通过静态修饰符来完成的。声明中具有静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。

你应该宣布他们

代码语言:javascript
复制
private int x; // or public like you did
private int y;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20184170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档