2012-03-25 15 views
5

Lo so, è un argomento molto di base, quindi se si tratta di una domanda duplicata, si prega di fornire un riferimento.Ordine di inizializzazione in Java

Dire, c'è un codice seguente:

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); 
    } 
} 

Produce: 42,42

Ma se cambiamo l'ordine della comparsa delle variabili:

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); 
    } 
} 

E 'uscite: 42,0

Capisco che io Nel secondo caso la situazione può essere descritta come: "Va bene, non so quale sia il valore x restituito, ma c'è qualche valore". Quello che non capisco completamente è come x può essere visto qui senza essere visto insieme al suo valore. È una questione di tempo di compilazione e di esecuzione? Grazie in anticipo.

+1

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

risposta

7

Quando si crea uno int in Java viene automaticamente inizializzato su 0. Quindi, ciò che fa il secondo codice è creare due interi x e impostarli entrambi su 0 quindi impostare sul valore di x che è 0 quindi impostare x sul valore 42.

+0

Grazie, ora ha senso. –

+0

@JohnDoe Nessun problema. – twain249

2

int ha 0 come valore predefinito.

1

Quindi in fase di compilazione, il compilatore genera istruzioni di riservare spazio (memoria) per xey ea stabilire i valori 0

Nell'esecuzione, il JVM popola l'oggetto Point (assegna memoria) e assegna memoria e valori iniziali 0 per x e y.

Poi, il codice di inizializzazione runtime inizia l'esecuzione e imposta y 0 e successivamente a 42 x (nel secondo caso)

Problemi correlati