ho 2 classi:L'inizializzatore statico viene eseguito dopo il costruttore, perché?
di Classe A:
public class A {
static B b = new B();
static {
System.out.println("A static block");
}
public A() {
System.out.println("A constructor");
}
}
Classe B:
public class B {
static {
System.out.println("B static block");
new A();
}
public B() {
System.out.println("B constructor");
}
}
ho creare una classe principale che crea solo nuova A:
public class Main {
public static void main(String[] args) {
new A();
}
}
Il l'output che ottengo è:
B static block
A constructor
B constructor
A static block
A constructor
Come si può vedere, il costruttore di A viene richiamato prima del suo inizializzatore statico.
Capisco che abbia qualcosa a che fare con la dipendenza ciclica che ho creato ma ho avuto l'impressione che l'inizializzatore statico dovrebbe sempre essere eseguito prima del costruttore.
Qual è la ragione per questo (tecnicamente nell'implementazione di Java)?
Si consiglia di evitare tutti gli inizializzatori statici tutti insieme?
Chiunque downvoted si prega di lasciare un commento –
buona domanda in realtà +1 .. :) – PermGenError
@AviramSegal alcune persone sono abituali di downvote .. non hanno mai letto l'intera domanda, leggendo la voce, hanno downvoting la domanda. – Ravi