Un intialisateur (ou initialiseur) est un bloc d'instructions encadré par des accolades, destiné à être exécuté juste avant le constructeur d'une classe.
{ // Bloc d'instructions... } class NomClasse { String a, b, c, d, resultat; { a = "Initialisation"; b = "avant"; c = "le"; d = "constructeur"; } public NomClasse(){ resultat = a + " " + b + " " + c + " " + d + " "; } public static void main(String[] args) { NomClasse objet = new NomClasse(); objet.affiche(objet.resultat); } static void affiche(String chaine){ System.out.println(chaine); } }
Lors d'une instanciation de classe, les initialisateurs de cette dernière sont exécutés immédiatement avant le constructeur.
Un initialisateur statique est un bloc d'instructions encadré par des accolades possédant un modificateur static.
static { // Bloc d'instructions... }
Les initialisateurs statiques ne s'intéressent qu'à des variables ou des méthodes portant le modificateur static.
class NomClasse { static String a = "variable statique a."; static String b; String c = "Variable par défaut c"; String d; // Exécuté en premier static { b = "variable b initialisee dans l'initialisateur statique."; affiche(b); } // Exécuté en troisième public NomClasse(){ d = "variable initialisee dans le constructeur"; System.out.println(d); } public static void main(String[] args) { // Exécuté en second affiche(a); NomClasse objet = new NomClasse(); // Exécuté en quatrième objet.affiche(objet.c); NomClasse objet2 = new NomClasse(); // Exécuté en dernier objet2.affiche(objet2.d); } static void affiche(String chaine) { System.out.println(chaine); } }
Lors d'une instanciation de classe, les initialisateurs statiques sont exécutés après que les données statiques soient allouées et avant le constructeur.
Les intialisateurs statiques permettent de lancer des traitements uniquement pour la première instance d'une classe, car ils ne sont exécutés qu'une seule fois.
Les initialisateurs statiques se révélent également utiles pour l'initialisation complexes de variables statiques.