如何从静态调用非静态方法?

时间:2013-09-10 09:27:53

标签: java

我尝试从静态drawScore()调用非静态calldrawScore()方法,但我在"cannot find symbol constructor Game"的{​​{1}}行上遇到了错误Game draw = new Game();。当我用鼠标移过该行时,它会显示calldrawScore()

4 个答案:

答案 0 :(得分:2)

- 根据经验,静态方法无法访问任何非静态变量或方法

- 这是因为static member属于class,其中non-static成员属于object,因此静态成员尝试要访问非静态成员,将不清楚访问哪些对象成员,因此在JAVA中禁止它。

答案 1 :(得分:0)

也许你可以将“getScore(int x)”改为:

public static int getScore(int x, GameScreen gs) {
        score = x;
        gs.drawScore();
        return score;
    }

现在您可以通过

在“GameScree”中调用它
GameScreen.getScore(valueSome, yourObject);

另一种方法是将所有GameScreen更改为Singleton

答案 2 :(得分:0)

您的GameScreen类构造函数将Game类对象作为参数。您可以获取当前的Game实例并将其作为参数传递,也可以在Gamescreen类中创建默认构造函数。

答案 3 :(得分:0)

要做GameScreen d = new GameScreen(),你需要GameScreen的0参数构造函数。你没有这样的构造函数。

无论如何,您的代码看起来很糟糕,因为您要在每个GameScreen中创建新的calldrawScore() ...

我认为你需要阅读静态方法和非静态方法之间的区别。然后返回,设计并更好地实施。