class DemoClass {
public static void main(String args[]) {
System.out.println("Start");
A a=new D();
}
}
class A {
static {
System.out.println("Static A");
A c=new C();
}
public A() {
System.out.println("Constr A");
}
}
class B extends A {
static {
System.out.println("Static B");
}
public B() {
System.out.println("Constr B");
}
}
class C extends B {
static {
System.out.println("Static C");
}
public C() {
System.out.println("Constr C");
}
}
class D extends C {
static {
System.out.println("Static D");
}
public D() {
System.out.println("Constr D");
}
}
Die Reihenfolge der Ausführung für obigen Code ist:Wann wird der statische Block in JAVA beim Erstellen eines Objekts ausgeführt?
Start
Static A
Constr A
Constr B
Constr C
Static B
Static C
Static D
Constr A
Constr B
Constr C
Constr D
Meine Ansicht nach all statischen Blöcke sollten zunächst dann nur das Objekt ausgeführt werden, erstellt werden. Aber hier wird zuerst das Objekt "A c = new C()" in einem statischen Block der Klasse A erzeugt und dann werden die anderen statischen Blöcke ausgeführt. Warum?
Als beiseite, ich vermute, dass Sie dies mit drei Klassen unter Beweis gestellt haben könnte oder möglicherweise nur 2 genauso gut - und machte Es ist einfacher, eine umfassende Liste von Ereignissen bereitzustellen. –