Когда выполняется статический блок класса?

У меня есть 2 jar-файла, назовем их a.jar и b.jar.

b.jar зависит от a.jar.

В a.jar я определил класс, назовем его StaticClass. В StaticClass я определил статический блок, вызвав метод с именем "init":

public class StaticClass {
  static {
    init();
  } 

  public void static init () {
    // do some initialization here
  }
}

в b.jar, у меня есть main, поэтому в main, я ожидаю, что был вызван метод init (), но на самом деле нет. Я подозреваю, что это потому, что StaticClass не был загружен jvm, может ли кто-нибудь сказать мне

  1. Верно ли мое заключение?
  2. Что запускает jvm для загрузки класса?
  3. Как я могу автоматически запустить статический блок?

Спасибо

69
задан StvnBrkdll 26 January 2017 в 02:22
поделиться