有 Java 编程相关的问题?

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

无法从静态上下文引用java非静态变量x

原谅我的无知。我是初学者:

为什么下面的代码给了我下面的编译错误? [line:16]无法从静态上下文引用非静态变量x

public class average{
int [] numbers = {2,3,4,5,6};
double x = averageMark(numbers);

public static double averageMark(int [] numbers){
    int sum = 0;  
    double average = 0.000;
    for (int i = 0; i < numbers.length; i++){  
      sum = numbers [i] + sum;  
      average = sum/numbers.length;  
    }
    return average;
  }

  public static void main (String [] args){
  System.out.println(x);
  }
}

共 (2) 个答案

  1. # 1 楼答案

    错误说明了一切

    non-static variable x cannot be referenced from a static context

    您必须使其成为x静态变量

    static double x = averageMark(numbers);
    

    或者创建一个Average实例并访问它

     public static void main (String [] args){
       System.out.println(new Average().x);
      }
    

    顺便说一句,这是一个惯例,你的类名应该以大写字母开头

    正如@mgaert所指出的,您还需要使数字数组成为静态的,因为您在静态方法中使用它

    static int [] numbers = {2,3,4,5,6};
    
  2. # 2 楼答案

    静态方法或变量不附加到特定对象,而是作为一个整体附加到类。它们是在类加载时分配的。如果您试图从静态方法内部使用实例变量,编译器会认为,“我不知道您在谈论哪个对象的实例变量!” 但是,如果您要创建average类的新实例,则可以通过此实例访问它,因此请按如下方式修改它:

    public class average{
    public int [] numbers = {2,3,4,5,6};
    public double x;   
    public static double averageMark(int [] numbers){
        int sum = 0;  
        double average = 0.000;
        for (int i = 0; i < numbers.length; i++){  
          sum = numbers [i] + sum;  
          average = sum/numbers.length;  
        }
        return average;
      }
    
      public static void main (String [] args){
      average a = new average(); // creating new instance 'a'
      a.x = average.averageMark(a.numbers); // assigning to variable 'x' of instance 'a' result of averageMark
      System.out.println(a.x); // output a
      }
    }