Java 无法从静态上下文引用非静态方法?

Java 无法从静态上下文引用非静态方法?,java,methods,Java,Methods,可能重复: 我有以下方法: 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, Col

可能重复:

我有以下方法:

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
publicsvoidfillmachine(游戏)
{
//球的颜色在这些颜色之间均匀分布,
//按升序排列。
颜色[]颜色组颜色
=新颜色[]{Color.red,Color.orange,Color.yellow,
颜色。绿色,颜色。蓝色,颜色。粉色,
颜色:洋红色};
//当添加GUI时,这种快乐变化将显示出来。
彩色球;
int noOfBalls=game.getMachineSize();

对于(int count=1;count,这是因为您无法从
static
方法访问非静态成员。(除非您有可调用该方法的对象)

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

  • 如果没有在方法中使用任何非静态成员,则将方法设置为静态
  • 创建一个对象并调用实例上的方法

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

Foo foo = new Foo(); // We don't know what class this is in... you do.
foo.fillMachine(game1);
当然,您可能已经有了在其他地方创建的类的实例,并且该实例可能是调用该方法的合适实例

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

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

有关更多信息,请参阅。

只需更改即可

public void fillMachine(Game game)

您当然可以-您只需要一个实例来调用成员。
public static void fillMachine(Game game)