从其他类调用非静态方法

时间:2013-01-28 17:10:14

标签: java

我正在完成我的任务,并遇到了一些错误。在一个班级我有这个方法:

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()作为静态方法,使变量也是静态的,并且它可以工作。但是在打印对象的另一种方法中,它不起作用(我相信这是因为static关键字)。

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

3 个答案:

答案 0 :(得分:13)

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

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

然后系统会有Ball个名为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);

杰夫是狼人。查克是他吃的人。 尽量忽略残酷的评论。我们都来自某个地方。

答案 1 :(得分:0)

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

而Class2中的getPoints()特定于类Class2

的实例

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

答案 2 :(得分:0)

除非Wins是静态的,否则getPoints不能是静态的。如果获胜是静态的,那么将只有一个获胜者副本,整个应用程序都共享。您需要确定所需的胜利副本数。 (“单身一人,只有一个类来存储一个