2013-03-01 22 views
8

Ho una confusione sull'inizializzazione delle variabili in Java. Come ho capito, le variabili di classe ottengono l'inizializzazione di default mentre le variabili locali non sono inizializzate di default. Tuttavia, se creo un array all'interno di un metodo utilizzando la nuova parola chiave, viene inizializzato per impostazione predefinita. È vero per tutti gli oggetti? L'uso della nuova parola chiave inizializza un oggetto indipendentemente dal fatto che si tratti di una variabile di classe o di una variabile locale?Inizializzazione predefinita in java

+1

hai provato fuori per vedere cosa succede? –

+0

Sì, ho provato con altri oggetti ed è quello che sembra accadere, ed è per questo che ho posto la domanda –

risposta

2

è vero di tutti gli oggetti? L'utilizzo della nuova parola chiave inizializza un oggetto indipendentemente dal fatto che si tratti di una variabile di classe o di una variabile locale?

Quando si utilizza la parola chiave new. significa che hai inizializzato il tuo oggetto. non importa se dichiarato a livello di metodo o livello di istanza.

public void method(){ 
Object obj1;// not initialized 
Object obj2 = new Object();//initialized 
} 
+1

Grazie per questo chiarimento. Questo è quello che stavo cercando. –

+0

@BM siete i benvenuti :) – PermGenError

5

Dopo ulteriori indagini, primitive sempre inizializzare al default solo quando sono variabili membro, variabili locali getteranno un errore di compilazione, se non vengono inizializzati.

Se si crea una matrice di primitive, verranno tutte inizializzate per impostazione predefinita (questo è vero sia per gli array locali che per quelli membri), una serie di oggetti che sarà necessario istanziare ciascuno di essi.

+0

di cui non sono sicuro. Quando dichiaro una primitiva in un metodo, non viene inizializzata di default.Se provo a usarlo senza inizializzazione, ottengo un errore di compilazione. –

+0

sì, i compilatori sputeranno "questa variabile potrebbe non essere stata inizializzata" per i messaggi primitivi locali non inizializzati –

+0

@JeffHawthorne davvero? Non ho un compilatore Java davanti a me per testarlo, ma ho pensato che ai primitivi venivano sempre dati valori predefiniti quando venivano dichiarati, indipendentemente da dove. –

27

Da Java Language Specification

Ogni variabile di classe, variabile esempio, o un componente matrice viene inizializzato con il valore predefinito quando viene creato (§15.9, §15.10):

  • Per tipo byte, il valore di default è zero, cioè, il valore di (byte) 0.

  • Per tipo corto, il valore di default è zero, cioè, il valore di (breve) 0.

  • Per tipo int, il valore di default è zero, cioè 0.

  • Per tipo lungo, il valore di default è zero, cioè, 0L.

  • Per il tipo a galleggiante, il valore di default è zero positivo, cioè, 0.0f.

  • Per il tipo double, il valore predefinito è zero positivo, ovvero 0,0d.

  • Per il tipo char, il valore di default è il carattere nullo, cioè, '\ u0000'.

  • Per tipo booleano, il valore predefinito è falso.

  • Per tutti i tipi di riferimento (§4.3), il valore predefinito è null

+0

+1 per elencare effettivamente tutti i tipi primitivi, ero troppo pigro =). –

+0

Grazie so quali sono i valori inizializzati quando vengono inizializzati. Non ero sicuro delle situazioni in cui gli oggetti sono inizializzati di default. –

+0

Questa dovrebbe essere la risposta accettata. –

Problemi correlati