2012-03-25 19 views
5

私は知っている、それは非常に基本的な話題なので、重複する質問があれば、参考にしてください。 42,42Javaでの初期化の順序

しかし、我々は変数の出現の順序を変更する場合:

public class Point { 

    int x = 42; 
    int y = getX(); 

    int getX() { 
     return x; 
    } 

    public static void main (String s[]) { 
     Point p = new Point(); 
     System.out.println(p.x + "," + p.y); 
    } 
} 

それは出力:

public class Point { 

    int y = getX(); 
    int x = 42; 

    int getX() { 
     return x; 
    } 

    public static void main (String s[]) { 
     Point p = new Point(); 
     System.out.println(p.x + "," + p.y); 
    } 
} 

それは出力

セイは、次のコードがあります: 42,0

私はn 2番目の場合、状況は次のように記述することができます。「さて、返されるx値は何か分かりませんが、値はあります。私が完全に理解していないのは、その価値とともに見られないxがここでどのように見えるかということです。それはコンパイル時間と実行時間の問題ですか?前もって感謝します。

+1

確認[JLS](http://docs.oracle.com/javase/specs/ jls/se7/html/jls-4.html#jls-4.12.5) – assylias

答えて

7

Javaでintを作成すると、自動的に0に初期化されます。したがって、2つ目のコードは、xyの両方を0に設定し、次にxの値にyを設定し、0の値に設定し、xを値42に設定します。

+0

ありがとうございました。 –

+0

@ジョンドー問題ありません。 – twain249

2

intのデフォルト値は0です。

1

したがって、コンパイル時に、コンパイラは、xとyのためのスペース(メモリ)を取っておくために、実行時に0

にその値を設定するための命令を生成して、JVMは、Pointオブジェクトが(それにメモリを割り当て)ポピュレートxとyのメモリと初期0の値を割り当てます。

そして、実行時の初期化コードが実行を開始し、0にYを設定し、42 X(第2の場合)

関連する問題