Initialisation de classe et d'instance

Initialisation de classe

Java permet d'écrire du code d'initialisation de classe qui sera exécuté lors du chargement de la classe (en même temps que l'initialisation des champs statiques).

Ce bloc sert justement à initialiser les variables static. Il est appelé initialiseur statique.

Il est constitué d'un bloc d'instructions (entre accolades) précédé du mot-clé static.

//-------------------------------------------------------- 
// Calcule à l'avance et mémorise certaines valeurs dans un tableau 
//-------------------------------------------------------- 
public class Sinusoid {
 private static int nbPoints = 500;
 public static double[] valSine = new double[nbPoints];
 // Initialisation du tableau valSine
 static {
  double x = 0.0;
  double dx = (Math.PI / 2) / (nbPoints - 1);
  for (int i = 0; i < nbPoints; i++, x += dx) {
   valSine[i] = Math.sin(x);
  }
 }
[...]
}

Initialisation de d'instance

Les classes peuvent également posséder des initialiseurs d'instance. Ils servent à initialiser un objet (une instance de la classe)

Un initialiseur d'instanc est constitué d'un bloc d'instructions entre accolades, mais sans le mot-clé "static".

Les initialiseurs d'instance sont exécutés après le constructeur de la classe parente et avant le constructeur de la classe dans laquelle ils sont déclarés.

Il est généralement préférable d'effectuer les initialisations de l'objet dans le constructeur de la classe.
public class test {
[...]
 private static int dim = 1000;
 private int[] intArr = new int[dim];
 // intArr initialization
 {
  for (int i = 0; i < dim; i++) {
   intArr[i] = i;
  }
 }
 [...]
}