变量初始化?

时间:2014-11-16 22:48:37

标签: java

我正在查看一些代码示例并找到了这个

Game game = new Game("Gladiator", null, 10);
{
 game.setState(GameState.STARTING);
 game.setJoinable(true);
}
{
 game.setState(GameState.LOBBY);
 game.setJoinable(true);
}
{
 game.setState(GameState.IN_GAME);
 game.setJoinable(false);
}

我想知道

是什么
{ }

初始化程序意味着

3 个答案:

答案 0 :(得分:3)

它在上下文中没有任何作用。它只是人的编码风格 - 在这种情况下,直观地显示了一组线。

在下面的内容中,那些{}实际上会做一些事情,它定义了本地分离的范围(示例代码没有意义,但显示了这个想法):

{
    int a = 1;
}
{
    int a = 2;
}

答案 1 :(得分:1)

这个代码是在一个方法中还是在类级别?

如果它在方法内部,大括号实际上什么都不做,它们只是界定块内定义的局部变量的范围,但由于在你发布的块内没有声明变量,所以它们不是很有用。

如果这些块处于类级别,那么它们是instance initializers。实例初始化器很少在Java中使用,将对象初始化代码放在构造函数中会更好。

答案 2 :(得分:1)

正如Peter Pei Guo所说,大括号在这里没有做任何事情。但值得注意的是其他一些事情:

  1. 在此上下文中,它们不是初始化程序块。显示的代码仅在方法或构造函数体内有意义。在这种情况下,大括号只是一个块语句...而不是初始化块。

  2. 块语句可以表示某些内容。例如:

      public void method() {
          {
              Game game = new Game("Gladiator", null, 10);
              game.setState(GameState.STARTING);
              game.setJoinable(true);
          }
          {
              Game game = new Game("Fashion Model", null, 10);
              game.setState(GameState.STARTING);
              game.setJoinable(true);
          }
      }
    

    这种情况下的块提供了一个范围,允许我们在没有编译错误的情况下声明第二个games变量。

  3. 但你问题中的代码并没有使用它。看起来作者有"一件事"关于他的代码的视觉外观。


      

    什么时候执行哪个块?

    当执行封闭块(或方法体)时,块语句以正常的语句顺序执行。它们只是陈述,它们的行为与其他陈述一样。

    每次创建实例时,都会按顺序执行实例初始化程序块以及任何其他字段声明/实例初始值设定项。它们在显式或隐式super构造函数链之后执行,但在当前类构造函数的其余部分之前执行。

    您还没有向我们展示足够的背景信息绝对确定这些是什么类型的阻止......但我们认为您正在向我们展示阻止声明。