我正在撰写一个应该非常简单的应用程序,但它始终使用name
和boxesSold
的最后设置值。这是一个最小的例子:
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
我怎样才能让它以我期望的方式运作?
答案 0 :(得分:1)
删除static关键字。 static将指示您的程序为此字段使用单个内存地址,并避免在每次创建BandBooster实例时为此字段分配专用内存。
答案 1 :(得分:0)
因为它没有任何实例成员,只有静态成员。
答案 2 :(得分:0)
静态创建的变量对于类是唯一的,并由所有实例共享。你所看到的是应该发生的事情。