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.