在静态 main 方法中使用 类

Using classes in static main method

所以我正在 Java 中编写一个迷你棋盘游戏程序。

程序将读取标准输入并按照输入的指示构建游戏。

为了帮助保持井井有条并提高我的 oo java 技能,我正在使用 Cell class 作为 nxn 游戏中的一个单元。

对于棋盘游戏,我需要将所有内容都放在一个文件中,并且它必须 运行 来自 static void main。

这是我的手机 class 的样子

public class Cell{
      public int x;
      public int y;
      .
      .
      .
 }

我想读取输入,为每个单元格赋值,然后将单元格添加到列表中,例如 ArrayList allCells。但是,我不能在静态上下文中使用它。

我知道 static 是单个实例,所以我很困惑我将如何去做。无论如何我可以使用基于 class 的系统来解决这个问题。每个单元格都是它自己的独立对象,因此将其设置为 stat 是行不通的。

任何形式的解释或替代方案都会很棒!希望我的描述足够清楚。

最好的方法是使 Cell 在其自己的文件中成为顶级 class,但您已经指出您需要将所有内容都放在一个文件中。所以我会考虑到这个限制来回答。

您需要将 Cell class 本身声明为 static 以便在静态上下文中使用它。例如:

public class Game {
    public static class Cell { // doesn't really need to be public
        ...
    }

    public static void main(String[] args) {
        Cell c1 = new Cell();
        Cell c2 = new Cell();
        ...
    }
}

如果 Cell class 没有 static 修饰符,在 main() 中调用 new Cell() 时会出现编译错误(我是猜测基本上是你遇到的问题)。

另一种方法是将 Cell class 修改为非 public。然后你可以把它设为顶层 class 在与你的游戏相同的文件中 class:

public class Game {
    public static void main(String[] args) {
        Cell c1 = new Cell();
        Cell c2 = new Cell();
        ...
    }
}

class Cell {
    ...
}

另一种选择是在 main() 方法中使 Cell 成为本地 class:

public class Game {
    public static void main(String[] args) {
        class Cell {
            ...
        }
        Cell c1 = new Cell();
        Cell c2 = new Cell();
        ...
    }
}

但是,您只能在 main() 方法本身中使用 Cell class;您无法在游戏的任何其他方法中利用 Cell 结构。