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)