【问题标题】:java non-static method cannot be referenced from a static context [duplicate]java非静态方法不能从静态上下文中引用[重复]
【发布时间】:2019-09-18 16:37:20
【问题描述】:

这是我的代码:

public abstract class Function{
    public abstract double evaluate(double x);
    public double findRoot(double a, double b, double epsilon){
        if( (evaluate(a) > 0 && evaluate(b) > 0) || (evaluate(a) < 0 && evaluate(b) < 0)){
            System.out.println("There is no root between these two points.");
        }
        double x = (a+b)/2;
        if(Math.abs(a-x) < epsilon){
            return x;
        }
        else if((evaluate(x) < 0 && evaluate(a) < 0) || (evaluate(x) > 0 && evaluate(a) > 0)){
            return findRoot(x, b, epsilon);
        }
        else{
            return findRoot(a, x, epsilon);
        }
    }
    public static void main(String[] args){
        double testSinFunc = SinFunc.findRoot(3, 4, .01);
        double testCosFunc = CosFunc.findRoot(1, 2, .01);
        if(testSinFunc == 3.14){
            System.out.println("SinFunc.findRoot(3, 4, .01) returned 3.14. Test passed!");
        }
        if(testCosFunc == 1.57){
            System.out.println("CosFunc.findRoot(1, 2, .01) returned 1.57. Test passed!");
        }
    }
}

编译器说:

非静态方法 findRoot(double, double, double) 不能 从静态上下文引用

我该怎么做才能解决这个问题?

【问题讨论】:

  • 建议的链接解释了如何从静态方法调用非静态方法,但这里可能是使方法静态而不是仅为调用而实例化类对象的逻辑。
  • Coder_2,你试过我的解决方案了吗?如果对您有帮助,请将其标记为已接受

标签: java


【解决方案1】:

您不能从静态上下文 (public static void main) 调用非静态方法 (public double findRoot)。

由于方法必须执行的工作,将其设为静态是有意义的:

public static double findRoot(...)

该错误表示在 main 方法所在的静态上下文中,编译器无法访问非静态方法,因为非静态方法仅存在于对象内部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2013-04-05
    相关资源
    最近更新 更多