2014-11-16 332 views
-1

我一直在寻找一些代码示例,发现这个变量初始化?

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

当然这并不能在上下文。这只是人的编码风格 - 在这种情况下,可视化地显示了这组线。

在类似下面,那些{}实际上会做一些事情,其定义局部分离范围(示例代码是没有意义的,但显示的想法):

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

是在一个方法中此代码或它在课堂上的水平?

如果它在一个方法内部,大括号并没有真正做任何事情,它们只是定义了块内定义的局部变量的范围,但由于没有变量在你发布的块中声明,所以它们没有用处在所有。

如果这些块在课堂级别,那么他们是instance initializers。实例初始化程序在Java中很少使用,所以最好将对象初始化代码放入构造函数中。

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变量没有编译错误。

但是你的问题中的代码没有使用这个。看起来作者对他的代码的视觉外观有“一件事”。


所以哪个块被执行时?

随着执行封闭块(或方法体),块语句按正常语句顺序执行。他们只是陈述,他们表现得像其他陈述。

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

您没有向我们展示足够的上下文绝对确定这些是什么类型的块......但我们认为您向我们展示了块语句。

+0

那么哪个块在什么时候被执行? –