非静态参考错误的非静态方法。简单的程序

时间:2012-01-04 01:53:26

标签: java class

任何人都可以向我解释,为什么我不被允许做以下事情?

public class first_class {  

    int grade1=7;
    int grade2=4;

    double average;

    public double calcAverage() {
        average=(grade1+grade2) / (2);
        System.out.println(average);
        return average;
    }

    public static void main(String []args) {
        first_class.calcAverage();
    }
}

我收到错误消息“非静态方法calcAverage()无法从first_class.main(first_class.java:17)的静态上下文中引用”。

3 个答案:

答案 0 :(得分:2)

请改为尝试:

new first_class().calcAverage();

这样做首先创建first_class类的新实例,然后在该实例上调用calcAverage()方法。现在,您正在引用实例上的方法,而不是尝试静态引用它。

错误表示你试图引用没有实例的方法的静态(main()方法)。如果方法标记为静态,但您的calcAverage()未标记为静态,则可以执行此操作,因此您需要创建实例。

答案 1 :(得分:1)

您尚未实例化first_class

的实例

这在你的previous question中进行了讨论,我的答案的第一段仍然存在:)(正如我对Java命名约定的评论一样。)

答案 2 :(得分:0)

public static void main(String[] args)
{
   first_class f=new first_class();
   f.calcAverage();
}

该方法不是静态的。您必须按上述first_class的对象访问它。此外,您没有遵循Java命名约定。班级名称应为FirstClass而不是first_class


如果要按名称访问方法,则代码应如下所示。

package temp;

final class first_class
{
    static int grade1=7;
    static int grade2=4;

    static double average;
    public static  double calcAverage()
    {
        average=(grade1+grade2) / (2);
        System.out.println(average);
        return average;
    }
}

final public class Main
{
    public static void main(String[] args)
    {
       first_class.calcAverage();
    }
}

在类static中创建声明的字段,因为Java中的静态方法只能访问静态成员(字段或方法),并且您将能够使用前面提到的静态方法访问它们。片段。