为什么这个类的每个对象对其成员都有相同的值?

时间:2014-05-30 23:00:03

标签: java static

我正在撰写一个应该非常简单的应用程序,但它始终使用nameboxesSold的最后设置值。这是一个最小的例子:

public class BandBoosterDriver
{
  public static void main (String[] args)
  {
    BandBooster booster1 = new BandBooster("First");
    BandBooster booster2 = new BandBooster("Second");
    booster2.updateSales(2);

    System.out.println(booster1.toString());
    System.out.println(booster2.toString());
  }
}

这是问题类:

public class BandBooster
{
  private static String name;
  private static int boxesSold;

  public BandBooster(String booster)
  {
    name = booster;
    boxesSold = 0;
  }

  public static String getName()
  {
    return name;
  }

  public static void updateSales(int numBoxesSold)
  {
    boxesSold = boxesSold + numBoxesSold;
  }

  public String toString()
  {
    return (name + ":" + " " + boxesSold + " boxes");
  }
}

这会产生

Second: 2 boxes
Second: 2 boxes

但我希望

First: 0 boxes
Second: 2 boxes

我怎样才能让它以我期望的方式运作?

3 个答案:

答案 0 :(得分:1)

删除static关键字。     static将指示您的程序为此字段使用单个内存地址,并避免在每次创建BandBooster实例时为此字段分配专用内存。

答案 1 :(得分:0)

因为它没有任何实例成员,只有静态成员。

答案 2 :(得分:0)

静态创建的变量对于类是唯一的,并由所有实例共享。你所看到的是应该发生的事情。