Чтобы прояснить неправильные представления со статикой, я просто обращусь к этой небольшой части кода:
public class Foo {
{ System.out.println("Instance Block 1"); }
static { System.out.println("Static Block 1"); }
public static final Foo FOO = new Foo();
{ System.out.println("Instance Block 2"); }
static { System.out.println("Static Block 2 (Weird!!)"); }
public Foo() { System.out.println("Constructor"); }
static public void main(String p[]) {
System.out.println("In Main");
new Foo();
}
}
Сюрприз заключается в том, что выход выглядит следующим образом:
Static Block 1
Instance Block 1
Instance Block 2
Constructor
Static Block 2 (Weird!!)
In Main
Instance Block 1
Instance Block 2
Constructor
Заметим, что у нас есть static {}
, который называется после двумя экземплярами {}
. это происходит потому, что мы вставляем конструктор в середине, вставляем порядок выполнения при первом вызове конструктора.
Обнаружено это, когда я работал над этим ответом - https://stackoverflow.com /a/30837385/744133.
В основном мы наблюдаем, что это произойдет:
Мне нужно исследовать, как сочетание наследования, а также явные и неявные вызовы super и это повлияет на это, и обновит результаты. Это было бы похоже на другие предоставленные ответы, за исключением того, что они ошибались со статической инициализацией.