在声明上声明List的问题

时间:2018-05-27 15:03:20

标签: java list arraylist

我创建了一个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;
    }
}

这是因为我的声明吗?

2 个答案:

答案 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;
    }
    }