0

我有一个静态的产品列表类型。当我从 Shopowner 类填充此列表时,它工作正常,但是当我编译 Customer.java 时,列表返回空白集。为什么填充的列表不保留?

class Products {

    String name;
    int itemcode;
    Products(){}
    static List <Products> list = new ArrayList<Products>();
    Products(String name,int itemcode)
      {  
        this.name=name;
        this.itemcode=itemcode;
      }
    public String toString()
    {return (name+""+itemcode);}        
}

class Shopowner {       
  public static void main (String ...at)

{
        Products o = new Products("Shamppo",12);    
        Products.list.add(o);
        Products o1 = new Products("choco",1112);   
        Products.list.add(o1);
           System.out.println(Products.list); //prints fine
}
    }

 class Customer {
                public static void main (String args[])
            {       
           System.out.println(Products.list);   //prints [] 
           }    
}

输出(编译 Customer.jav 时)

  [] 
4

3 回答 3

5

请参阅下面的部分代码:

public static void main (String ...a)
{
Products o= new Products("Chocolate"); 
o.addToList();
Products o1= new Products("Icecream");
o1.addToList();
new Products().showList(); //This line is the culprit

您在对象 o 和 o1 中添加列表,并且您在另一个对象上调用 showList() 完全new Products().showList(); ?

注意: 它适用于静态列表,因为它在您的 Product 类的所有对象之间共享,而非静态列表并非如此。

于 2013-08-10T19:14:20.283 回答
0

问题是您通过创建一个新产品并在其上调用 showList 来创建一个新列表。如果您想要特定产品的列表,那么您应该在正确的对象上调用该方法。静态为每个实例维护一个变量,因此它在静态时可以工作。

于 2013-08-10T19:13:35.570 回答
0

首先,编译一个类不会给你你提到的结果。您不仅在编译 Customer.java,而且还在执行 Customer 中的 main 方法。

在我看来,您有两种主要方法,一种在客户中,另一种在店主中。您期望在运行 Customer#main() 时,您会看到 Shopowner#main() 中填充的内容。然而,这根本不合理:如果您运行 Shopowner#main(),它是您另一次运行 Customer#main() 的另一个过程。静态变量不会跨越不同的进程。

我相信你应该对编程有一些基本的了解。您的代码中有很多设计问题需要修复,但与上面提到的问题相比,它们变得微不足道......

于 2013-08-12T03:38:55.950 回答