有人能向我解释为什么不允许我做以下事情吗?
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)的静态上下文中引用"。
试试这个:
new first_class().calcAverage();
这样做的目的是首先创建first_class类的一个新实例,然后在该实例上调用calcAverage()
方法。现在,您正在对实例上的方法进行引用,而不是试图静态地引用它。
该错误表明您试图从某个静态(main()方法)引用一个没有实例的方法。如果方法被标记为static,但calcAverage()没有被标记为静态,则可以执行此操作,因此需要创建一个实例。
您尚未实例化first_class
的实例。
这在你之前的问题中已经讨论过了,我的回答的第一段仍然有效:)(我对Java命名约定的评论也是如此。)
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中的静态方法只能访问静态成员(字段或方法),并且您可以使用前面片段中提到的静态方法来访问它们。