我几乎在Java的每个游戏示例中都看到了这段代码。创建Game
类的实例,然后从该实例执行循环。
public static void main(String[] args) {
Game g = new Game();
g.gameLoop();
}
public Game () {
}
然而,除了gameLoop()
的执行之外我什么都不做,为什么不这样写呢?我 像这样。
Game
如果是这样的话?
这两种情况都在起作用并且已经过我的测试。
答案 0 :(得分:3)
如果您这样写:
new Game ();
这是通过使用构造函数完成的。构造函数的主要目的是创建对象并初始化任何变量并设置您需要设置的任何初始值。
如果您只编写new Game()
,它可以编译,但并不意味着它是一种很好的实现方式。为什么这不是一个好的实施?
这是因为这样做,就像在构造函数中编写entire game
一样好。开头是错误的,因为实际上你不应该在构造函数中实现你的整个逻辑。
那么为什么人们这样做呢:
Game g = new Game();
g.gameLoop();
现在,请注意这个和你建议的那个(使用构造函数)的区别。这样,您模块化您的代码成为子问题。模块化的好处?很多:
n
次但是,使用Java编写代码的方式有很多种。您也可以使gameLoop()
静态。这样你就可以做到这一点(没有实例化对象):
Game.gameLoop();
这是可能的,但我不建议你这样做。
答案 1 :(得分:0)
一个原因是因为哲学:构造函数用于构造事物而不是运行它们。但也存在实际问题。如果您在构造函数内部调用gameLoop()
,则无法在不运行它的情况下创建Game
。如果您想构建游戏,然后对其配置进行一些更改,然后运行它,则可能会出现问题。如果您最终继承Game
。