有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由于“非静态方法导致的静态引用”(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:忽略奇怪的缩进。只是堆积如山,格式怪异


共 (2) 个答案

  1. # 1 楼答案

    main()方法是一个静态方法,您只能从其中访问静态字段。因此,您有两种选择:

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

    问题是,员工列表不是静态的,但是您正在静态方法中使用它。不能这样做,static意味着这个类的每个实例都有一个,而notstatic则意味着每个实例都有一个。使employees为静态,或者不在静态方法中使用它,在静态方法中执行类似new X()的操作,并在构造函数中使用employees:

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