2014-12-30 34 views
5

sto imparando Java e scrivere il codice semplice di seguito:Assegnare una variabile statica prima di dichiarare

public class Test { 

    private int a = b; 
    private final static int b = 10; 

    public int getA() { 
     return a; 
    } 
} 

public class Hello { 

    public static void main(String[] args) { 
     Test test = new Test(); 
     System.out.println(test.getA()); 
    } 

} 

Il risultato: 10. Molto bene! Funziona con successo e non ha errori.

Qualcuno può spiegare perché posso assegnare una variabile statica prima di dichiararla?

+0

possibile duplicato di [In quale ordine vengono inizializzate le variabili di classe Java?] (Http://stackoverflow.com/questions/2138801/in-what-order-are-java-class-variables-initialised) – Joe

+0

membri statici sono già inizializzato una volta la classe caricata prima di crearne un'istanza. – Braj

+0

Cosa intendi con "assegna prima di dichiarare"? "int b" dichiara, "= 10" assegna, quindi dichiari prima di assegnare. O vuoi dire usare prima di dichiarare? –

risposta

5

L'assegnazione

private int a = b; 

avviene quando si crea una nuova istanza di Test (appena prima del costruttore viene chiamato).

La dichiarazione e l'inizializzazione della variabile statica b, ha luogo prima che l'istanza venga creata, quando la classe viene caricata.

L'ordine delle istruzioni non ha importanza, poiché le variabili statiche vengono sempre inizializzate per prime.

+0

"(appena prima che venga chiamato il costruttore)" non proprio, l'inizializzazione dei campi viene spostata sui costruttori, quindi è più simile a "quando viene chiamato il costruttore, ma dopo la sua chiamata" super (argomenti) "implicita o esplicita. – Pshemo

+0

Puoi condividere documenti ufficiali per me? Mi piace davvero capire profondamente –

+1

@DatNguyen Il documento più ufficiale è il JLS. Leggi le sezioni [12.4] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4) e [12.5] (http://docs.oracle.com /javase/specs/jls/se8/html/jls-12.html#jls-12.5). – Eran

0

L'ordine di dichiarazione delle variabili non è molto importante nel codice, poiché in realtà la variabile statica verrà inizializzata prima di quelle non statiche.

0

Le variabili statiche sono associate a una classe, che ovviamente esiste sempre prima delle istanze della classe. Pertanto, è possibile assegnarlo liberamente ai campi di istanza.

1

Javavariables vengono inizializzati questo ordine:

  1. Variabili statiche del superclassi se del caso
  2. variabili statiche della classe corrente.
  3. variabili statiche, e blocchi statici nell'ordine in cui sono dichiarati
  4. variabili istanza della superclasse
  5. Tutte le variabili della classe corrente istanza.
  6. variabili istanza, e blocchi di inizializzazione livello esempio, al fine dichiarazione

Quindi "b" è inizializzata prima la "a".

Spero che questo aiuti.

0

Il codice che hai scritto funziona bene perché private final static int b = 10; è un classe variabile (campo statico). Quel tipo di variabili viene inizializzato per primo.

Quindi viene eseguita la linea private int a = b; che inizializzare l'istanza variabile (campo) a.

In breve, non importa l'ordine in cui tali variabili sono dichiarate nel codice.Le variabili di classe vengono sempre dichiarate prima delle variabili di istanza .

Problemi correlati