2013-07-06 29 views

回答

0

作爲每Oracle tutorial

public static int x = 9; 

這種運作良好,當初始化值是可用的並且初始化可以是放在一條線上。但是,這種初始化形式由於其簡單性而具有侷限性。如果初始化需要某些邏輯(例如,錯誤處理或for循環來填充複雜數組),則簡單分配是不充分的。

實例變量可以在構造函數中初始化,其中可以使用錯誤處理或其他邏輯。爲了爲類變量提供相同的功能,Java編程語言包括靜態初始化塊。

什麼編譯器實際上做的是在內部產生一個類初始化程序,結合了所有的靜態變量初始化,所有的代碼靜態初始化塊,它們出現在類聲明的順序。這個單一的初始化過程是自動運行的,只有一次,當第一次加載類時。

但在你的情況下,用你的代碼,它沒有任何區別。

+1

即使'公共靜態最終'可以從靜態塊 – sanbhat

0

通常,static塊用於更復雜的初始化,例如,如果您有List並且想要填充它。

編輯(回滾;))在你的情況下,雖然初始化是等價的。

+0

@TheNewIdiot初始化你爲什麼從我的答案中刪除我的編輯?在這個例子中,在這兩種情況下,OP的「int」是否都等同於初始化? – Mena

+0

我很抱歉,這是我的錯,你可以回滾。 – NINCOMPOOP

+0

@TheNewIdiot aha ok :) – Mena

0

它們都是相同的,並將在類創建/初始化時被調用和初始化。 沒有這種差異。

1

對於這個例子沒有區別。這兩種形式完全相同。 (的確,我懷疑生成的字節碼實際上是相同的。)

有些情況是有差別的。或者更確切地說,你可以表達的內容有所不同。映入腦海一對夫婦有:

  • 一個static初始化塊可以應付異常(尤其是那些檢查),但初始化表達式不能。

  • A static初始化塊可以將靜態初始化爲任意複雜的語句序列的結果,但初始化表達式僅限於您可以在單個表達式中計算的結果。


話雖如此,我會建議您使用更簡單的初始化表達式形式儘可能。毫無疑問,它更具可讀性。

+0

...尤其是因爲它總是*可能,因爲靜態初始化器僅僅是一個匿名靜態方法。 –