Se uno static init block deve inizializzare una variabile "di classe" (static), la variabile deve essere dichiarata prima del blocco. (in realtà nì, non è sempre così, ci sono altre regole che non ti ho detto).
EDIT: mi pareva di ricordare così ... ma una prova veloce con JDK 7 mi ha confuso un attimo. Dovrei andare a rivedere le regole e provare con JDK vecchi. Comunque queste sono davvero super-finezze.
Comunque prova:
codice:public class Prova { static { System.out.println("static init block"); } { System.out.println("instance init block"); } public Prova() { System.out.println("costruttore"); } public static void main(String[] args) { System.out.println("----main----"); new Prova(); new Prova(); } }
Nota come lo static init block viene addirittura eseguito PRIMA che il main venga invocato!!



Rispondi quotando