我创建了一个ArrayList,然后我尝试将值放入其中。但是在我拥有多个价值观之后。列表中的每个对象都被最后一个替换。
这是我的声明:
public static List<Dish> menu = new ArrayList<>();
public static void setMenuList(){
menu.add(new Dish(1,19.99, "Mocha" , 5));
System.out.println(menu);
menu.add(new Dish(2,0.99, "Pok tar" , 5));
System.out.println(menu);
menu.add(new Dish(3,10.99, "Klingon Bloodwine" , 5));
menu.add(new Dish(4,13.45, "Gagh" , 5));
menu.add(new Dish(5,12.95, "Bahgol" , 5));
menu.add(new Dish(6,08.00, "Racht" , 5));
menu.add(new Dish(7,09.99, "Osol Twist" , 5));
menu.add(new Dish(8,14.75, "Gespar" , 5));
System.out.println("36 - " + menu);
menu.add(new Dish(9,100.01, "Romulan Ale" , 5));
System.out.println("37 - " + menu);
}
这是Dish
类:
public class Dish {
private static int catalogNumber;
private static Double costs;
private static String nameofDish;
public static int availabilityOfDish;
public Dish(int number, Double price, String name, int availability) {
catalogNumber = number;
costs = price;
nameofDish = name;
availabilityOfDish = availability;
}
public static int getCatalogNumber() {
return catalogNumber;
}
public static Double getCosts() {
return costs;
}
public static String getNameofDish() {
return nameofDish;
}
public static int getAvailabilityOfDish() {
return availabilityOfDish;
}
@Override
public String toString() {
return catalogNumber + " " + costs + " " + nameofDish + " " +
availabilityOfDish;
}
}
这是因为我的声明吗?
答案 0 :(得分:1)
这是因为您在课程static
中使用了Dish
关键字。 static
意味着它是所有类实例的共同价值,无论其数量如何 - 简单地说。因此,这些方法和变量不受某个实例的约束。
省略所有static
个关键字,它应运行良好。
在官方文档中了解有关static
的更多信息:
在声明中包含static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
答案 1 :(得分:0)
将Dish类更改为此类(否静态):
public class Dish {
private int catalogNumber;
private Double costs;
private String nameofDish;
public int availabilityOfDish;
public Dish(int number, Double price, String name, int availability) {
catalogNumber = number;
costs = price;
nameofDish = name;
availabilityOfDish = availability;
}
public int getCatalogNumber() {
return catalogNumber;
}
public Double getCosts() {
return costs;
}
public String getNameofDish() {
return nameofDish;
}
public int getAvailabilityOfDish() {
return availabilityOfDish;
}
@Override
public String toString() {
return catalogNumber + " " + costs + " " + nameofDish + " " +
availabilityOfDish;
}
}