2016-04-28 64 views
1

下面是我的代碼,想知道爲什麼null打印而不是Hello World !!!Java靜態變量被分配爲空值

public class MyClass { 

    static String s1 = getMyValue(); 
    static String s2 = "Hello World!!!"; 

    private static String getMyValue() { 
     return s2; 
    } 

    public static void main(String args[]) { 
     System.out.print(s1); //outputs: null 
    } 
} 
+0

嘗試把S2初始化S1之前。 – Berger

+3

按聲明順序初始化。因此's1'被賦值給'getMyValue()',它返回'null',因爲's2'還沒有被賦值。 – Tunaki

+0

我很久沒有碰過Java了,但是您不需要使用'this.getMyValue()'引用內部函數,這似乎是C#,PHP中的常見用法,並且據我記得Java。可能會有所改變。任何人都可以對此有所瞭解?實際上,使用其他方法分配的類屬性通常會在構造函數中執行。 – dchayka

回答

1

運行這在一個調試器,你西港島線看到,S1 = getMyValue()前S2被設置爲「Hello World!」被執行..

+0

對,但是爲什麼它沒有給出返回s2的錯誤,因爲它沒有找到s2,而s2是在s1之後定義的。 –

+1

@MaheshSapkal編譯器不會分析每一個可能的路徑來找出誰調用了'getMyValue',並且它是否在該方法內使用任何值之前定義。 –