非静态方法...不能从静态上下文中引用

时间:2012-04-18 06:32:53

标签: java

以下是错误消息

non static method hero(double,double,double) cannot be reference from a static context

这是类方法。

class MyMath {
  double hero(double n1, double n2, double n3)
  {
    double n4;
    double n5;
    n4 = (n1 + n2 + n3) / 2;
    n5 = Math.sqrt((n4 * (n4 - n1) * (n4 - n2) * (n4 - n3)));
    return n5;
  }
}

这是主程序

double length_of_a;
double length_of_b;
double length_of_c;
double area_of_triangle;

area_of_triangle = (double) MyMath.hero(length_of_a,length_of_b,length_of_c);

6 个答案:

答案 0 :(得分:1)

你的英雄方法应该是

static double hero(double n1, double n2, double n3){...}

答案 1 :(得分:1)

如果您希望使用类名调用方法hero,请将其设为static。否则只需创建一个MyMath对象并调用该函数。

MyMath m = new MyMath();
area_of_triangle = m.hero(length_of_a,length_of_b,length_of_c); //No need to typecast too

答案 2 :(得分:1)

您的方法hero不是静态的。这意味着您只能在类MyMath的实例上调用它。您试图将其称为静态方法,如下所示:

area_of_triangle = (double) MyMath.hero(length_of_a,length_of_b,length_of_c);

制作hero方法static,或创建MyMath的实例并在其上调用方法。

// Solution 1: Make hero static
class MyMath {
    static double hero(double n1, double n2, double n3)
        // ...

// Solution 2: Call hero on an instance of MyMath
MyMath m = new MyMath();

area_of_triangle = m.hero(length_of_a,length_of_b,length_of_c);

注意:无需将方法的结果转换为double,该方法已返回double

答案 3 :(得分:1)

您的hero()方法未设置为静态。您可以使hero()成为静态方法,如下所示:

static double hero(double n1, double n2, double n3)
{
    ...

或者您可以创建MyMath的新实例,如:

MyMath newMath = new MyMath();

然后致电:

newMyMath.hero(length_of_a,length_of_b,length_of_c);

答案 4 :(得分:0)

您收到该错误是因为您尝试访问MyMath.hero,就好像它是static方法一样。要解决此问题,您必须将方法hero声明为static,或者首先创建类型为MyMath的对象,然后从该对象调用该方法。

答案 5 :(得分:0)

main方法是static,java不允许在静态方法中引用非静态obj。 所以你应该使hero()方法也是静态的,或者从非静态方法引用它。

相关问题