不能从静态上下文中引用非静态变量 x
Posted
技术标签:
【中文标题】不能从静态上下文中引用非静态变量 x【英文标题】:non-static variable x cannot be referenced from a static context 【发布时间】:2013-01-15 15:55:06 【问题描述】:请原谅我的无知。我是初学者:
为什么下面的代码会出现以下编译错误? [line: 16]
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);
【问题讨论】:
System.out.println(new average().x);
=> 你需要一个平均值的实例。
这非常有效。请问为什么会这样?
同样在这种情况下,我访问的字段是否正确?如何访问该方法?
看这个教程:docs.oracle.com/javase/tutorial/java/javaOO/objects.html.
谢谢你,会读的。
【参考方案1】:
错误说明了一切
不能从静态上下文中引用非静态变量 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;
【讨论】:
您还需要将数字设为静态。并且访问需要一个点。【参考方案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
【讨论】:
以上是关于不能从静态上下文中引用非静态变量 x的主要内容,如果未能解决你的问题,请参考以下文章