This question already has answers here:
Non-static variable cannot be referenced from a static context

(12个答案)


4年前关闭。




我正在尝试从类stay中访问布尔变量MontyHall,但不能,因为它是非静态的,并且我试图在静态上下文中访问它
这是代码:

public void updateStatistics(Door door1, Door door2, Door door3)
{
    this.numGames = this.numGames + 1;
    oneDoor(door1, 0);
    oneDoor(door2, 1);
    oneDoor(door3, 2);

    if (MontyHall.stay == true){
        this.numStay = this.numStay + 1;
    }
    else{
        this.numSwitch = this.numSwitch + 1;
    }
}


可变停留位于类MontyHall中。任何帮助将不胜感激,因为我很困惑如何解决此问题
MontyHall的属性:

public class MontyHall {
  boolean stay;
  Door A = new Door("A");
  Door B = new Door("B");
  Door C = new Door("C");

  public MontyHall(Door a, Door b, Door c){
    this.A = a;
    this.B = b;
    this.C = c;
  }}

最佳答案

您的代码MontyHall.stay是您尝试静态引用它的部分(通过使用类名)。

非静态字段将需要实例化的对象才能进行引用。在这种情况下,如果此方法在MontyHall中,则可以使用use this.stay来代替MontyHall.stay来使用它。如果上面列出的方法不在MontyHall类之内,那么您将需要创建一个新的MontyHall对象,例如:MontyHall montyHall = new MontyHall();

另外,您可能希望将stay变量设为静态,在这种情况下,只需将简单的static关键字添加到变量声明中即可。

08-18 19:49