2014-11-16 267 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

那麼哪個塊在什麼時候被執行? –