可能重复:
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);
我不知道如何解决这个问题。
答案 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)