我正在编写一个应用程序,该应用程序应该非常简单,但是对于所有内容,它始终使用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


如何使它按我期望的方式工作?

最佳答案

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

09-08 05:55