2016-04-28 15 views
1

以下は私のコードです。Java静的変数にNULL値が割り当てられています

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

S1、S2の前に初期化を配置するようにしてくださいを参照ウィル。 – Berger

+3

宣言の順に初期化されます。したがって、 's1'は' s2'がまだ割り当てられていないので 'null 'を返す' getMyValue() 'に割り当てられます。 – Tunaki

+0

私は長い間Javaに触れていませんが、C#、PHP、そしてJavaを思い出す限り、this.getMyValue()を使用して内部関数を参照する必要はありません。何か変わったかもしれない。誰もがこれにいくつかの光を当てることができますか?実際には、別のメソッドを使用して割り当てられるクラスプロパティは、通常、コンストラクタ内で実行されます。 – dchayka

答えて

1

デバッガで実行これとあなたはs2はに設定される前に実行され、S1 = getMyValue()ということの "Hello World !!!" ..

+0

しかし、s2を見つけられず、s1の後にs2が定義されているので、なぜ戻り値s2にエラーが発生しないのでしょうか。 –

+1

@MaheshSapkalコンパイラは 'getMyValue'と呼ばれ、それがメソッド内で使用されているどのような値前に定義されていた場合、誰を把握する一つ一つの可能​​なパスを解析しません。 –

関連する問題