Originariamente inviato da alesdario
Volevo chiervi se fra i due metodi c'è differenza e se una è migliore dell'altra.
Variabili di "istanza" e variabili di "classe" vengono sempre inizializzate subito, come minimo, al loro valore di "default" (0 per i valori numerici/char, false per boolean, null per i reference). Se poi c'è una inizializzazione esplicita, ok viene poi eseguita.
Quindi mettere ad esempio una variabile di "istanza":
private String str = null;
sarebbe tecnicamente del tutto superfluo inizializzarla esplicitamente a null, in quanto lo è già per default.
E tra fare:
codice:
public Classe {
Obj o = new Obj();
}
oppure
codice:
public Classe {
Obj o;
public Classe() {
o = new Obj();
}
}
Non cambia praticamente nulla. Se non il fatto che nel primo caso la inizializzazione viene eseguita indipendentemente da quanti costruttori ci sono e da quale viene poi invocato.
Se invece la inizializzazione della variabile dipendesse da quale costruttore (se più di uno) è invocato o da parametri del costruttore, chiaramente andrebbe fatta nel costruttore (secondo caso).
La cosa che deve essere chiara è: le variabili di classe/istanza sono sempre come minimo al loro valore di default.