Les champs statiques sont initialisés lors de l' initialisation de la "phase" de la classe de chargement (chargement, de liaison et de l'initialisation) qui comprend les initialiseurs statiques et les initialisations de ses champs statiques. Les initialiseurs statiques sont exécutées dans un ordre textuel tel que défini dans la classe.
Prenons l'exemple:
public class Test {
static String sayHello() {
return a;
}
static String b = sayHello(); // a static method is called to assign value to b.
// but its a has not been initialized yet.
static String a = "hello";
static String c = sayHello(); // assignes "hello" to variable c
public static void main(String[] arg) throws Throwable {
System.out.println(Test.b); // prints null
System.out.println(Test.sayHello()); // prints "hello"
}
}
Le Test.b imprime null
parce que quand l' sayHello
a été appelé en statique de la portée, la variable statique a
n'a pas été initialisé.