2013-08-04 127 views
-10

像這樣的節目裏面,爲什麼一個變量不需要類型的靜態塊

static { 
    a = 6; 
} 

爲什麼元素 「a」 不需要

+9

'A' 確實需要的類型。 a的類型必須在靜態塊之上聲明,否則將無法編譯。 –

+1

這本身不會編譯。 –

+0

[This](http://www.jusfortechies.com/java/core-java/static-blocks.php)是我在這個主題上找到的最佳參考。 – Mordechai

回答

1

每個變量都需要Java中的類型。

10

這不是一個變量的聲明,這是一個變量的賦值。 'a'的類型在其他地方定義。所以,這個代碼本身不會編譯,你需要一個變量聲明,如:

class X { 
    private static int a; 

    static { 
     a = 6; 
    } 
} 

作爲回答下面的評論,這是initializion序列:

  1. 靜態報表/靜塊被執行。
  2. 實例變量被賦予默認值
  3. 如果實例變量被分配了一個編譯時間常量,則會初始化實例變量。否則,將使用項目5完成(實例變量實例初始化程序將按照它們定義的順序從頂部到底部一起完成)。
  4. 構造函數運行
  5. 實例初始化塊在所有調用超級已完成但尚未執行構造函數的其他部分之前運行。
  6. 其餘的構造函數被執行。
+0

這個靜態在構造函數之前運行嗎? –

+0

結帳第12.4章爲這個答案:http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html –

+0

我已經更新了我的例子更擴展的答案[來源] (http://www.coderanch.com/t/267125/java-programmer-SCJP/certification/Initializing-Sequence) –

0

我想你的地方初始化的變量

private static int a; 
static { 
    a = 6; 
    } 
相關問題