由于“非静态方法导致的静态引用”,无法使用arraylist(java)

时间:2014-06-12 18:05:24

标签: java exception static-methods

我正在为我正在使用的任务编写一个简单的程序。但是,我收到错误"无法对非静态字段员工进行静态引用"当我试图移动ArrayList"员工"主要方法之外。

有效的代码:

public class X{

public static void main(String[] args){

    ArrayList<Employee> employees = new ArrayList<Employee>();

    while(i<6){
        int skill = generator.nextInt(5);
        int id = generator.nextInt(100);  //for this purpose we will never 
        Employee newFresher = new Employee(id, skill);
        employees.add(newFresher);
        System.out.println(newFresher);
        i++;
    }
}

public void getCallHandler(){
   //CODE THAT REALLY NEEDS TO SEE THAT ARRAYLIST
}
}

抛出错误的代码&#34;无法创建静态引用&#34;:

public class X{

ArrayList<Employee> employees = new ArrayList<Employee>();

public static void main(String[] args){


    while(i<6){
        int skill = generator.nextInt(5);
        int id = generator.nextInt(100);  //for this purpose we will never 
        Employee newFresher = new Employee(id, skill);
        employees.add(newFresher);
        System.out.println(newFresher);
        i++;
    }
}

public void getCallHandler(){
   //CODE THAT REALLY NEEDS TO SEE THAT ARRAYLIST
}
}

我只是不知道造成这种情况的原因。非常感谢帮助。

PS:忽略奇怪的缩进。它只是堆叠溢出格式化它很奇怪。

2 个答案:

答案 0 :(得分:1)

main()方法是一种静态方法,您只能从中访问静态字段。所以你有2个选择:

  1. 只需将employees字段标记为static,然后您就可以直接从main方法访问它。
  2. 或者,如果您不将该字段设为静态,则它仍然是实例字段。在这种情况下,在实例方法(processEmployees())中移动main方法的所有逻辑,并创建类的实例(X x = new X();),然后调用此方法(x.processEmployees())。

答案 1 :(得分:0)

问题是,员工列表不是静态的,而是在静态方法中使用它。你不能这样做,静态意味着一个用于这个类的每个实例,而不是静态意味着每个实例一个。要么让员工保持静态,要么在静态方法中不使用它,在静态方法中执行类似new X()的操作以及在构造函数中使用员工:

public X() {
   // use employees here!
}