2010-09-17 34 views
8

Mi vergogno un po 'a chiedermelo, essendo un programmatore Java per anni, ma ecco:
C'è una differenza tra l'assegnazione di oggetti durante la costruzione e così facendo direttamente quando si dichiara il campo pertinente? Cioè, c'è una differenza tra i due seguenti:inizializzazione membro classe java

public class MyClass{ 
    MyObj obj=new MyObj(); 
} 

E

public class MyClass{ 
    MyObj obj; 
    public MyClass() { 
     obj=new MyObj(); 
    } 
} 

Naturalmente, Presumo che ciò specifiche init di non fare affidamento su parametri esterni.

+2

Non c'è nulla di cui vergognarsi. Tutti imparano qui !! – bdhar

risposta

3

esempio di inizializzazione variabile done prima chiamata al costruttore

sua non è bene fare.
È possibile limitare l'utente dalla chiamata di const. se si desidera eseguire determinate operazioni prima dell'inizializzazione.

Best Practice:

  1. Non inizializzare con i valori di default nella dichiarazione (null, false, 0, 0.0 ...).
  2. Preferire l'inizializzazione nella dichiarazione se non si dispone di un parametro costruttore che modifica il valore del campo.
  3. Se il valore del campo cambia a causa di un parametro del costruttore, inserire l'inizializzazione nei costruttori.
  4. Sii coerente nella tua pratica. (La regola più importante)

da here

+0

Anche con chiamate a variabili/metodo statiche è possibile generare una NullPointerException se la variabile non è inizializzata fino alla funzione di costruzione. – Sean

+1

Contesto che * qualsiasi * di queste regole sia "best practice". Nessuno di questi ha un effetto significativo sulla leggibilità del codice, e questa è l'unica cosa che conta davvero qui. –

+0

La leggibilità del codice non è solo una preoccupazione, penso, ritengo che sia meglio per me almeno. e naturalmente qualsiasi programmatore java andrà per const. prima di leggere il codice. –

2

No, non c'è. Tranne che se aggiungi più costruttori avrai il codice duplicato.

Un'alternativa è quella di utilizzare un blocco di inizializzazione

{ 
    var = 1; 
} 

Riferimento: Initializing Fields

Problemi correlati