En termes de cycle de vie des objets, il n'y a pas de différence. Les deux sont invoqués au moment de la construction, et logiquement le bloc initialisateur peut être considéré comme faisant partie de la construction.
D'un point de vue sémantique, un initialisateur est un outil intéressant à posséder pour plusieurs raisons :
l'initialisateur peut améliorer la lisibilité du code en conservant la logique d'initialisation à côté de la variable à initialiser :
public class Universe {
public int theAnswer;
{
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
}
// a bunch of other vars
}
vs
public class Universe {
public int theAnswer;
// a bunch of other vars
public Universe() {
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
// other constructor logic
}
}
Les initialisateurs sont invoqués sans tenir compte quel que soit le constructeur utilisé.
Les initialisateurs peuvent être utilisés dans des anonymes, où les constructeurs ne le peuvent pas.
2 votes
Les initialisateurs d'instance sont assez rares (sauf si vous tombez sur le code de quelqu'un qui aime l'idiome de la double accolade).