非静态方法不能从静态上下文中引用?

时间:2012-02-23 19:42:45

标签: java methods

  

可能重复:
  What is the reason behind “non-static method cannot be referenced from a static context”?

我有以下方法:

public void fillMachine(Game game)
{
  // Colours of balls are evenly spread between these colours,
  // in ascending order.
  Color [] colourGroupColours
    = new Color [] {Color.red, Color.orange, Color.yellow,
                  Color.green, Color.blue, Color.pink,
                  Color.magenta};
  // This happiness change will show up when the GUI is added.

  Color ballColour;
  int noOfBalls = game.getMachineSize();
  for (int count = 1; count <= noOfBalls; count++)
  {
    // The colour group is a number from 0
    // to the number of colour groups - 1.
    // For the nth ball, we take the fraction
    // (n - 1) divided by the number of balls
    // and multiply that by the number of groups.
    int colourGroup = (int) ((count - 1.0) / (double) noOfBalls
                           * (double) colourGroupColours.length);
    ballColour = colourGroupColours[colourGroup];
    game.machineAddBall(makeNewBall(count, ballColour));
  } // for

  } // fillMachine

在主要课程中我有fillMachine(game1);

我收到错误:non-static method fillMachine(Game) cannot be referenced from a static context fillMachine(game1);

我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

那是因为您无法从static方法访问非静态成员。 (除非你有一个对象来调用方法)

您的main方法是静态的。这意味着它不是绑定到类的特定对象,而是绑定到类本身。 fillMachine不是静态的,这意味着您只能在类的具体实例上调用它。你没有。你可以:

  • 制作方法static,如果您没有使用其中的任何非静态成员。
  • 创建一个对象并在实例上调用该方法

答案 1 :(得分:2)

这里你没有给我们太多的上下文,但基本上你的方法是实例方法,因此必须在类的实例上调用。您可以从静态方法调用它,但是您需要有一个实例来调用它。例如:

Foo foo = new Foo(); // We don't know what class this is in... you do.
foo.fillMachine(game1);

当然,您可能已经拥有了在其他地方创建的类的实例,这可能是调用该方法的适当实例。

或者,如果不需要引用任何实例变量,则可以使方法为静态。

理解静态成员(与类相关,而不是与类的任何特定实例相关)和实例成员(与之相关的)之间的区别非常重要一个特定的例子。)

有关详细信息,请参阅Java Tutorial

答案 2 :(得分:0)

只需更改

public void fillMachine(Game game)

public static void fillMachine(Game game)