I campi statici vengono inizializzati durante la "fase" initialization del caricamento della classe (caricamento, collegamento e inizializzazione) che include inizializzatori statici e inizializzazioni dei relativi campi statici. Gli inizializzatori statici vengono eseguiti in un ordine testuale come definito nella classe.
Si consideri l'esempio:
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"
}
}
Il Test.b stampa null
perché quando il sayHello
è stato chiamato in ambito statico, la variabile statica a
non è stata inizializzata.
simili per blocco di inizializzazione statico: http://stackoverflow.com/questions/ 2007666/in-what-order-do-static-initializer-blocks-in-java-run –