在静态主方法

时间:2016-03-17 02:02:07

标签: java static main

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

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

为了帮助保持井井有条并提升我的oo技能,我使用Cell类作为nxn游戏中的单元格。

对于棋盘游戏,我需要将它全部放在一个文件中,并且它必须从static void main运行。

这是我的Cell课程的样子

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

我想读取输入,并为每个单元格分配值,然后将单元格添加到列表中,例如ArrayList allCells。但是,我无法在静态环境中使用它。

我知道静态是一个单一的实例,所以我很困惑我会怎么做。无论如何,我可以使用基于类的系统来解决这个问题。每个单元格都是它自己的单独对象,所以制作统计数据是行不通的。

任何种类的解释或替代方案都会令人惊叹!希望我在描述中足够清楚。

1 个答案:

答案 0 :(得分:1)

最好的方法是让Cell成为自己文件中的顶级类,但是你已经表明你需要一个文件中的所有内容。所以我会记住这个约束。

您需要将Cell类本身声明为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();
        ...
    }
}

没有static类的Cell修饰符,在new Cell()内调用main()时会出现编译错误(我猜这基本上是你的问题)有...)。

另一种方法是将Cell类修改为非public。然后,您可以将其作为与游戏类相同的文件中的顶级类:

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

class Cell {
    ...
}

另一种替代方法是在Cell方法中将main()作为本地类:

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

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