由于“非静态方法导致的静态引用”(java),异常无法使用arraylist
我正在为一项任务编写一个简单的程序。但是,当我尝试将ArrayList“employees”移到main方法之外时,会出现错误“无法对非静态字段employees进行静态引用”
有效的代码:
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
}
}
引发错误“无法进行静态引用”的代码:
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:忽略奇怪的缩进。只是堆积如山,格式怪异
# 1 楼答案
main()方法是一个静态方法,您只能从其中访问静态字段。因此,您有两种选择:
processEmployees()
)中main方法的所有逻辑,创建类(X x = new X();
)的实例,然后调用此方法(x.processEmployees()
)李># 2 楼答案
问题是,员工列表不是静态的,但是您正在静态方法中使用它。不能这样做,static意味着这个类的每个实例都有一个,而notstatic则意味着每个实例都有一个。使employees为静态,或者不在静态方法中使用它,在静态方法中执行类似
new X()
的操作,并在构造函数中使用employees: