我正在为我正在使用的任务编写一个简单的程序。但是,我收到错误"无法对非静态字段员工进行静态引用"当我试图移动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:忽略奇怪的缩进。它只是堆叠溢出格式化它很奇怪。
答案 0 :(得分:1)
main()方法是一种静态方法,您只能从中访问静态字段。所以你有2个选择:
processEmployees()
)中移动main方法的所有逻辑,并创建类的实例(X x = new X();
),然后调用此方法(x.processEmployees()
)。 答案 1 :(得分:0)
问题是,员工列表不是静态的,而是在静态方法中使用它。你不能这样做,静态意味着一个用于这个类的每个实例,而不是静态意味着每个实例一个。要么让员工保持静态,要么在静态方法中不使用它,在静态方法中执行类似new X()
的操作以及在构造函数中使用员工:
public X() {
// use employees here!
}