如何避免java中的“从静态上下文引用的非静态方法”?真的很简单

时间:2012-11-19 03:43:22

标签: java static

当我尝试构建此程序时,总会出现“从静态上下文引用的非静态方法”这样的错误 我认为因为我可以在“main”中使用“addto”功能。那么我该如何解决这个问题呢?我需要一个公共arraylist因为我必须在“addto”中进行计算

THX!

public class Calculation {  
    ArrayList<int[]> cal = new ArrayList<>();

    public static void main(String[] args) {
    System.out.println(addto(3,5));
    }

    String addto(int figone, int figtwo){
     ........do the calculations by using arraylist cal
    }
 }

2 个答案:

答案 0 :(得分:4)

您需要在main函数中实例化一个Calculation对象,以便使用Calculation的非静态方法。

非静态方法仅作为对象的成员“存在”(您可以将其视为类的实例)。为了完成这项工作,你需要写:

System.out.println(new Calculation().addto(3, 5))

答案 1 :(得分:1)

真的很简单?

System.out.println(new Calculation().addto(3,5));

Calculation calculation = new Calculation();
System.out.println(calculation.addto(3,5));
// and use 'calculation' some more ...

(您还可以在static方法声明中添加addto修饰符,但是您需要将cal设置为静态,以便addto可以使用它。不好主意。)


行。那么编译方法实际上说的是addto被声明为实例方法...但是你试图在不说使用哪个实例的情况下调用它。实际上,您试图将其称为静态方法。

“修复”(见上文)是创建一个实例并在其上调用方法。