Una delle domande che ti possono capitare ad un colloquio o ad una certificazione o un semplice test riguardo il linguaggio Java è la seguente: Possiamo eseguire del codice prima del metodo main(String[])
?
La risposta è sì. Se utilizziamo un blocco statico di codice nella classe. Il codice contenuto in nel blocco static
viene eseguito prima della creazione dell’oggetto stesso.
Tutte le dichiarazioni all’interno di questo blocco static
saranno eseguite una sola volta durante il caricamento della classe, quindi prima della creazione di oggetti nel metodo principale.
Compila e ed esegui il seguente codice.
public class AClass {
public AClass() {
System.out.println("call costuctor AClass()");
}
public void method1() {
System.out.println("call method1");
}
public static void main(String[] args) {
AClass instance = new AClass();
instance.method1();
}
}
otterrai il seguente output
call costuctor AClass()
call method1
modifica ora il codice nel modo seguente
public class AClass {
static {
System.out.println("call static block");
}
public AClass() {
System.out.println("call costuctor AClass()");
}
public void method1() {
System.out.println("call method1");
}
public static void main(String[] args) {
AClass instance = new AClass();
instance.method1();
}
}
otterrai il seguente output
call static block
call costuctor AClass()
call method1
Come puoi vedere il codice in static { }
è stato eseguito ancor prima del costruttore stesso, quindi quando ancora nessuna istanza della classe esisteva.
Ancora una variante del codice appena sopra, le modifiche sono limitate al metodo main
quindi ti riporto solo quello
public static void main(String[] args) {
AClass instance = new AClass();
instance.method1();
AClass instanceBis = new AClass();
instanceBis.method1();
}
e l’output prodotto
call static block
call costuctor AClass()
call method1
call costuctor AClass()
call method1
Anche in questo caso, nonostante siano state create due istanze della classe AClass
, l’esecuzione del blocco static
è limitato ad una sola occorrenza prima all’atto di caricamento della classe. E anche per oggi è tutto. Come al solito se hai una domanda in merito a questo post, vuoi un approfondimento o hai un argomento che ti interesserebbe che io trattassi nei prossimi post puoi scrivermi.