Как следует @ Эллиот-Фриша, простой ответ в JLS:
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.7 https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4.2
Как только класс упоминается в запущенной программе загружается - что означает доступ к самому экземпляру class
или создание нового экземпляра класса.
Загрузка класса включает сканирование пути к классам для контейнеров, которые могут содержать этот конкретный класс, считывая полученную банку и загружая/проверяя соответствующий байт-код из банки. Сделав это, идентифицируются и выполняются соответствующие классы инициализации класса класса. Все, что происходит до , вызывает экземпляр экземпляра класса.
Следует отметить, что все это ограничивается определенным загрузчиком классов. Несколько загрузчиков классов могут в конечном итоге выполнять одни и те же шаги для одного и того же класса в одно и то же время или в разное время. Таким образом, один и тот же статический инициализатор может выполняться несколько раз в одном JVM, хотя только один раз в одном экземпляре класса loadload.
В принципе - любая ссылка на класс вызывает загрузку класса, но загружаются только классы, на которые ссылаются. Просто потому, что ссылочный класс находится внутри банки, это не означает, что будут загружены другие классы в банке.
When does the JVM load classes?
Во время инициализации класса, смотри также [JLS-8.7. Статические инициализаторы] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.7) –