如果ArrayList是实例变量,那么ArrayList是否在Java中自动声明为static?

时间:2010-05-09 07:44:29

标签: java variables static arraylist

我正在尝试做这样的事情:

private class aClass
{
  private ArrayList<String> idProd;

  aClass(ArrayList<String> prd) 
  {
      this.idProd=new ArrayList<String>(prd);
  }

public ArrayList<String> getIdProd()
  {
      return this.idProd;

  }
}

所以,如果我有ArrayLIst<String>(st1,st2,st3)的多个实例,并且我想创建aClass的新对象:

{
 aClass obj1,obj2,obj3;
 obj1=new aClass(st1);
 obj2=new aClass(st2);
 obj3=new aClass(st3);
}

如果我为每个对象(obj1..obj3)访问方法getIdProd(),是否所有的aClass对象都会返回st3? ArrayList作为实例变量自动声明为static?

3 个答案:

答案 0 :(得分:4)

不,除非您已声明成员变量,否则成员变量不会自动为静态。我建议您重新格式化您的问题并发布其他背景信息,以便使您的问题更加清晰。很可能你得到的结果与你所期望的结果不同,原因不同于你的问题所暗示的结果。

答案 1 :(得分:1)

您可以从现有类中创建一个新的arraylist,它将现有元素的所有元素添加到新数组列表中。

但元素是相同的,因为数组列表不是“深度克隆”,这似乎是你寻找的。您必须构建一个构造函数,在所有元素上调用clone()并将克隆添加到类中的新数组列表中。

BTW:使用代码格式功能使您的问题更具可读性。编辑:哦,你在我发布这个答案的时候做到了:)

答案 2 :(得分:0)

数据成员不会自动为静态,除非您在接口内部声明它们(不常见)

由于您在构造函数中复制了数组列表,并且由于项类型是不可变的(String),因此aClass的不同实例可以在完全不同的ArrayList副本上工作。