Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java中静态方法的困惑_Java_Static - Fatal编程技术网

关于Java中静态方法的困惑

关于Java中静态方法的困惑,java,static,Java,Static,据我所知,静态方法可以在不需要存在对象实例的情况下调用。因此,不必创建对象并调用该对象上的方法,只需调用类上的方法即可 现在,我有一个类Main,它有以下对象:publicScribbleCanvasMyCanvas。在ScribbleCanvas类中,我想访问Main-类的一个方法 现在,既然已经有一个Main的实例(因为它被称为ScribbleCanvas),我如何访问此类的非静态方法?或者更好的问题-我的推理错误在哪里?你可以将Main实例设置为myCanvas的成员并使用它。你可以将Ma

据我所知,静态方法可以在不需要存在对象实例的情况下调用。因此,不必创建对象并调用该对象上的方法,只需调用类上的方法即可

现在,我有一个类
Main
,它有以下对象:
publicScribbleCanvasMyCanvas。在
ScribbleCanvas
类中,我想访问
Main
-类的一个方法


现在,既然已经有一个
Main
的实例(因为它被称为
ScribbleCanvas
),我如何访问此类的非静态方法?或者更好的问题-我的推理错误在哪里?

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

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

你可以为
ScribbleCanvas
设置一个构造函数或setter将参数作为
Main
的当前实例

ScribbleCanvas sc = new ScribbleCanvas(this);


有了这些,您只需引用参数的一个字段。

您可以为
ScribbleCanvas
创建一个构造函数或setter,该构造函数或setter将参数作为
Main
的当前实例

ScribbleCanvas sc = new ScribbleCanvas(this);


有了这些,您只需将一个字段引用到参数。

下面的代码解释了应该如何操作。
testInstanceMethod
被视为 主类中实例方法的示例。这种方法也应该是可访问的

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;
}

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

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;
}

}

免责声明:未测试/编译

下面的代码解释了您应该如何执行此操作。
testInstanceMethod
被视为 主类中实例方法的示例。这种方法也应该是可访问的

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;
}

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

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;
}

}

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

如果我理解您的问题,请:

  • 有一个
    Main
    类的实例,我们称之为
    myMain
  • 该实例将有一个名为
    myCanvas
  • ScribbleCanvas
    实例(
    myCanvas
    )可以访问
    myMain
    中的方法
为此,您可以:

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

这有帮助吗?

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

  • 有一个
    Main
    类的实例,我们称之为
    myMain
  • 该实例将有一个名为
    myCanvas
  • ScribbleCanvas
    实例(
    myCanvas
    )可以访问
    myMain
    中的方法
为此,您可以:

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

这有帮助吗?

您确定已经有主类的实例了吗?你的密码在哪里?你尝试过什么?你能提供更多细节吗?为什么需要从该类中调用Main的方法?
ScribbleCanvas
是该类的名称。这与实例的存在有什么关系?你能展示一些代码吗?如果使用ScribbleCanvas的函数可以调用主类实例,则可以将该实例传递给ScribbleCanvas。如果没有,您可以将函数设置为“publicstatic”,然后它将可用于每个函数/类。您确定已经存在主类的实例吗?你的密码在哪里?你尝试过什么?你能提供更多细节吗?为什么需要从该类中调用Main的方法?
ScribbleCanvas
是该类的名称。这与实例的存在有什么关系?你能展示一些代码吗?如果使用ScribbleCanvas的函数可以调用主类实例,则可以将该实例传递给ScribbleCanvas。如果没有,您可以将函数设置为“publicstatic”,然后它将可用于每个函数/类。