任何人都可以向我解释,为什么我不被允许做以下事情?
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)的静态上下文中引用”。
答案 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中的静态方法只能访问静态成员(字段或方法),并且您将能够使用前面提到的静态方法访问它们。片段。