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!!
Ultima modifica di andbin; 26-04-2016 a 12:51
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet