当前位置: 首页 > 知识库问答 >
问题:

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

慕容康安
2023-03-14

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

为什么下面的代码给我以下编译错误?[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个答案

丁学
2023-03-14

静态方法或变量不附加到特定对象,而是附加到整个类。它们在装入类时分配。如果您尝试从静态方法内部使用实例变量,编译器会认为,“我不知道您说的是哪个对象的实例变量!但是,如果您要创建平均类的新实例,则可以通过此实例访问它,因此请按如下方式对其进行修改

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
  }
}
陶成化
2023-03-14

错误说明了一切

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

您必须将其设为x静态变量。

static double x = averageMark(numbers);

或创建“平均”实例并访问它。

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

顺便说一句,按照惯例,类名应该以大写字母开头。

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

static int [] numbers = {2,3,4,5,6};
 类似资料:
  • 我是Android编码的n00b,今天我想尝试使用定位服务。 我设置了一个简单的类和一个简单的main,只是为了得到经度和纬度。 但当我尝试调用retrive的构造时,long and latitude Android Studio弹出了一个错误: 错误:(33,16)错误:无法从静态上下文引用非静态变量纬度 这是我的位置班

  • 我编写了以下测试代码: 但会出现以下错误: 我如何让我的方法识别我的类变量?

  • 问题内容: 我是Java新手,我正在尝试通过递归函数部署斐波那契跟踪,然后计算运行时间。这是我设法编写的代码: 问题是,当我尝试将其转换为字节码时,出现以下错误: 我想知道是什么问题?! 问题答案: 更改 至 并使该方法静态。 或者,改变 至

  • 错误来自此行板状态 addme = 新板状态(); 由于某种原因,它所指向的非静态变量是“新”的。我不清楚如何修复这个错误,因为new不应该是一个变量,也不是。 查看stackoverflow记录,该错误通常来自非静态方法,通常通过将该方法设为静态或完全绕过该方法来解决。T 下面的代码是为了引用这个语句前后发生的事情。 }……

  • 问题内容: 我在使我的应用程序正常工作时遇到了一些麻烦。 我得到了 我确实收到了错误: 但是我解决了这个问题,因为我需要定义。 这是我的代码: 问题答案: 您的“主要”方法被认为是静态的,因此它只能访问静态对象,请尝试将object1声明为静态: 编辑:如果您需要2个对象,则这样做没有任何危害: 不要混淆静态字段和静态类(例如Singleton)。在此上下文中,静态(静态Object object

  • 我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?