1

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

为什么以下代码给我以下编译错误?[行: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);
  }
}
4

2 回答 2

3

错误说明了一切

不能从静态上下文中引用非静态变量 x

您必须将其设为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};
于 2013-01-31T14:05:08.270 回答
1

静态方法或变量不附加到特定对象,而是附加到整个类。它们是在加载类时分配的。如果你尝试在静态方法中使用实例变量,编译器会认为,“我不知道你在说哪个对象的实例变量!” 但是如果你要创建一个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
  }
}
于 2013-01-31T14:27:57.423 回答