Разрешить пользователю загружать файл XML

Чтобы прояснить неправильные представления со статикой, я просто обращусь к этой небольшой части кода:

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.

В основном мы наблюдаем, что это произойдет:

  1. В первый раз инициализируется объект, Инициализирует текущий объект как для статического и инициализация экземпляра, смешанная на основе порядка появления
  2. . Для всех последующих инициализаций инициализация экземпляра выполняется только в порядке появления, поскольку статическая инициализация уже произошла.

Мне нужно исследовать, как сочетание наследования, а также явные и неявные вызовы super и это повлияет на это, и обновит результаты. Это было бы похоже на другие предоставленные ответы, за исключением того, что они ошибались со статической инициализацией.

13
задан David 18 August 2011 в 12:25
поделиться