Java ArrayList对象的add()方法不起作用

时间:2013-10-22 20:29:09

标签: java oop arraylist

我是JAVA的新手,我面临着一个初学者的问题,我知道:-P

IN PLAIN ENGLISH =>我正在尝试创建一个对象的ArrayList,并在需要时在数组中添加新对象。

好的,所以这是我的代码的紧凑版本

package ACP.Employee;   //created package
import java.util.ArrayList;     //imported arraylist class
import ACP.Employee.EmployeeClass;  //imported employee class of same package

public class ClientClass
{
    ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>(); //created a new Array List

    public static void main (String[] args)
    {
        int objcount = 0;   //variable to store objct count

        empArray.add(objcount, EmployeeClass obj);
    }
}

IDE(Eclipse)在 empArray.add 行上给出了以下错误

  • 无法对非静态empArray进行静态引用
  • 无法将EmployeeClass解析为变量
  • 令牌obj上的语法错误,删除此令牌。

我还尝试用以下语法替换该行,

empArray.add(new EmployeeClass());

但是仍然存在以下错误。

  • 无法对非静态empArray进行静态引用

请在这里帮忙,我已经看过了Array Spec的ArrayList的add()方法,它遵循:::

  

void add(int index,Object element)==&gt;&gt;将指定元素插入列表中的指定位置索引   boolean add(Object o)==&gt;&gt;将指定的元素追加到此列表的末尾。       来源(http://www.tutorialspoint.com/java/java_arraylist_class.htm

2 个答案:

答案 0 :(得分:2)

您的代码存在两个问题。

  1. 您正尝试从静态上下文(main)访问类ClientClass的成员。只有该成员是静态的,才有可能。由于empArray没有modifiers,因此默认为package-private,这不是静态的。您必须通过将其声明为静态来使其在静态上下文中可访问:

    static ArrayList<EmployeeClass> empArray = new ArrayList<>();

    或创建ClientClass的实例并访问其成员

    ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>();
    
    public static void main(String[] args) {
        ClientClass t = new ClientClass();
        t.empArray.add(new Employee());
    
    }
    
  2. 将员工传递到要添加的列表的方式不会在java中编译。这是关于如何在java中创建对象的good tutorial。事实上,你似乎是Java新手,所以我建议你从第一页的教程开始,它们非常适合快速熟悉这门语言,你很快就会有所作为。

答案 1 :(得分:1)

static方法,您只能访问static字段 从not-static方法,您可以访问所有字段 E.g

private int i = 0;
private static int j = 0;

public void increment()
{
   i++; // correct
   j++; // correct
}
public static void staticIncrement()
{
   i++; // compilation error
   j++; // correct
}  

因此,在您的示例中,empArray应为static

public class ClientClass
{
    static ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>(); 

    public static void main (String[] args)
    {
       int objcount = 0;   //variable to store objct count

       empArray.add(objcount, new EmployeeClass());
       empArray.add(new EmployeeClass());
    }
}