关于Java中静态方法的困惑

时间:2013-12-22 13:14:23

标签: java static

据我了解static,可以在没有需要存在的对象实例的情况下调用静态方法。因此,您可以在类上调用该方法,而不是创建对象并在该对象上调用该方法。

现在,我有一个类Main,其中包含以下对象:public ScribbleCanvas myCanvas;。在ScribbleCanvas课程中,我想访问Main - 类的方法。

现在,由于已经存在Main的实例(因为这称为ScribbleCanvas),如何访问此类的非静态方法?或者更好的问题 - 我的推理中的错误在哪里?

4 个答案:

答案 0 :(得分:1)

您可以将Main实例设置为myCanvas的成员并使用它。

答案 1 :(得分:1)

您可以拥有ScribbleCanvas的构造函数或setter,它将参数作为Main的当前实例。

ScribbleCanvas sc = new ScribbleCanvas(this);

sc.setMainClass(this);

有了这些,你只需要在参数中引用一个字段。

答案 2 :(得分:1)

以下代码说明了您应该如何操作。 testInstanceMethod被视为一个 Main类中实例方法的示例。此方法也应该可以访问

public class ScribbleCanvas{

private Main mainObject = null;


public ScribbleCanvas(){

this.mainObject = new Main();
//Call instance method in mainObject (member instance)
this.mainObject.testInstanceMethod();
}

public void setMainObject(Main arg){
this.mainObject = arg;
}

public Main getMainObject(){
return this.mainObject;
}

}

对于调用静态方法,您可以直接放置Classname并使用DOT运算符调用Main.testStaticMethod(),前提是该方法也可以访问

免责声明:未经测试/编制

答案 3 :(得分:1)

如果我理解你想要的问题:

  • 拥有Main课程的实例,我们称之为myMain
  • 该实例将包含ScribbleCanvas类的实例,名为myCanvas
  • 来自ScribbleCanvas实例(myCanvas)可以访问myMain内的方法。

为了做到这一点,你可以:

  • Main中声明ScribbleCanvas类型的成员,说callingMain
  • Main
  • 的构造函数中包含paramMain类型的参数(例如ScribbleCanvas
  • 在构造函数中,将paramMain存储在callingMain
  • Main,将this传递给构造函数
  • 在您的代码中,您可以参考callingMain.method()

这有帮助吗?