Поскольку мы знаем, что instance block
вызывается перед constructor
. Технические характеристики , Ответ переполнения стека и т. Д.
Итак, результат, который мы ожидаем из приведенного ниже кода:
class Test{
static { System.out.println("Static Block"); }
{ System.out.println("Instance Block"); }
Test(){
System.out.println("Constructor Body");
{ System.out.println("Constructor Instance Block"); }
}
}
class TestApp{
public static void main(String[] args){
new Test();
}
}
должен быть:
Static Block
Instance Block
Constructor Instance Block
Constructor Body
Тогда почему я получаю следующий вывод:
Static Block
Instance Block
Constructor Body
Constructor Instance Block
Но если я изменю порядок операторов в constructor
, например:
class Test{
static { System.out.println("Static Block"); }
{ System.out.println("Instance Block"); }
Test(){
{ System.out.println("Constructor Instance Block"); }
System.out.println("Constructor Body");
}
}
Затем он выводит ожидаемый результат, но это не должно быть так, потому что в документах говорится, что instance block
вызывается до constructor
.
Почему instance block
вызывается после тела constructor
или мыМожно сказать, почему это называется по порядку?