Я знаю, что статические блоки инициализируются во время загрузки класса и, поскольку класс загружается только один раз в программу, они инициализируются только один раз.Почему блоки инициализации экземпляра выполняются перед конструкторами
IIB (блоки инициализации экземпляра) инициализируются каждый раз, когда экземпляр класса создается, и тот же для конструкторов: они выполняются во время создания объекта.
Я не понимаю, почему в приведенной ниже программе IIB выполняется перед конструкторами.
код-public class Hello {
public static void main(String args[]) {
C obj = new C();
}
}
class A {
static {
System.out.println("Inside static block of A");
}
{
System.out.println("Inside IIB of A");
}
A() {
System.out.println("Inside NO-ARGS constructor of A");
}
}
class B extends A {
static {
System.out.println("Inside static block of B");
}
{
System.out.println("Inside IIB of B");
}
B() {
System.out.println("Inside NO-ARGS constructor of B");
}
}
class C extends B {
static {
System.out.println("Inside static block of C");
}
{
System.out.println("Inside IIB of C");
}
C() {
System.out.println("Inside NO-ARGS constructor of C");
}
}
Почему IIB выполняется первым по сравнению с конструкторами?
На самом деле конструкторы называют первым, но ваш 'sysout' выполняется после того, как блок инициализации, который вставляется в качестве первого оператора (после 'super()') компилятором. https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html –