0

我正在做我的任务,并且遇到了一些错误。在一个类中,我有这种方法:

public class Class1{
    public static boolean winningRecord(){
        final int WINNING_RECORD;
        return Class2.getPoints() > WINNING_RECORD;
    }
}

class Class2{
    int wins = 0;
    public int getPoints(){
        return wins; //More to it but to keep it simple I'll leave that out
    }
}

现在我收到错误“无法从静态上下文引用非静态方法......”,所以我将 getPoints() 设为静态方法,也将变量设为静态,并且它可以工作。但是在另一种打印出 Objects 的方法中它不起作用(我相信这是因为 static 关键字)。

所以我的问题毕竟是有一种方法可以在不创建第二个类的实例的情况下调用方法吗?这是我拥有的一般想法代码,它应该让您了解正在发生的事情,如果没有,我会添加更多内容。

4

3 回答 3

21

java中的一个关键概念是实例化的概念。类定义具有一种对象类型的所有规则。对象的每个实例都将遵循相同的规则。例如,如果我定义

class Ball {
  public void bounce() { 
    // lots of code here
  }
}

然后系统有代码用于称为Balls 的东西,它可以bounce

如果我想要两个球...

public class Main {
  public static void main(String args[]) {
    Ball beachBall = new Ball();
    Ball soccerBall = new Ball();

我可以随心所欲地弹跳它们

    beachBall.bounce();
    beachBall.bounce();
    soccerBall.bounce();
    beachBall.bounce();

但我不能说

    Ball.bounce();

因为这会让我的系统产生“哪个球?”的问题。

static方法和变量与特定实例无关。

例如:

class Werewolf {
  static boolean fullMoon = false;

  static void setFullMoon(boolean isVisible) {
    fullMoon = isVisible;
    // code code code
  }

  void eatPerson(Person p) {
    // code code code
  }
}

应用于所有狼人的静态方法,因此在类上调用它:

Werewolf.fullMoon(true);

应用于特定狼人的非静态(实例)方法,因此在实例上调用它。

jeff.eatPerson(chuck);

杰夫是狼人。查克是他吃的人。尽量忽略那些残酷的评论。我们都从某个地方开始。

于 2013-01-28T17:30:28.727 回答
0

在您的代码中,由于静态键工作,winningRecord()特定于类Class1本身。

getPoints()在 Class2 中特定于类的实例Class2

无法从静态上下文访问非静态方法。

于 2013-01-28T18:19:41.393 回答
0

getPoints 不能是静态的,除非 wins 是静态的。如果wins 是静态的,那么只有一个wins 副本,由整个应用程序共享。你需要决定你需要多少份胜利。(而且“除了单例,只有一个类来存储一个类通常是愚蠢的

于 2020-05-26T10:38:27.677 回答