如果ArrayList是实例变量,它在Java中是否自动声明为静态?

如果ArrayList是实例变量,它在Java中是否自动声明为静态?,java,variables,static,arraylist,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;

我正在尝试这样做:

private class aClass
{
  private ArrayList<String> idProd;

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

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

  }
}

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

否,除非已将成员变量声明为静态变量,否则它们不会自动声明为静态。我建议您重新格式化您的问题,并张贴额外的上下文,以便使您的问题更清楚。最有可能的是,您得到的结果与您预期的结果不同,原因与您的问题所暗示的不同。

不,除非您声明成员变量为静态变量,否则它们不会自动成为静态变量。我建议您重新格式化您的问题,并张贴额外的上下文,以便使您的问题更清楚。您得到的结果很可能与您期望的结果不同,原因与您的问题所暗示的不同。

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

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


顺便说一句:使用代码格式功能使你的问题更具可读性。编辑:哦,你是在我发布这个答案时做的:)

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

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


顺便说一句:使用代码格式功能使你的问题更具可读性。编辑:哦,你是在我发布这个答案时做的:)

数据成员不是自动静态的,除非你在接口中声明它们(不常见)


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

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


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

Btw,在变量和方法声明中使用接口(即列表)以及特定实现(ArrayList)是一种很好的做法仅当创建新的具体实例时。请参见,例如,在本文中,
ArrayList
与此完全无关。你应该把
ArrayList
与问题分开,试着理解你困惑的基本原理。顺便说一句,最好在变量和方法声明中使用接口(即列表),只有在创建新的具体实例时才使用具体实现(ArrayList)。请参见,例如,在本文中,
ArrayList
与此完全无关。你应该把
ArrayList
从问题中分离出来,试着理解你困惑的根本原因。
{
 aClass obj1,obj2,obj3;
 obj1=new aClass(st1);
 obj2=new aClass(st2);
 obj3=new aClass(st3);
}