Необходимо различать файл test3.class
(созданный компилятором) и объект класса test3.class
класса test3
, созданный в время выполнения, когда класс загружается загрузчиком классов.
Файл класса всегда создается, если вы компилируете исходный файл .java
(модуль компиляции) с классом в нем (чаще всего class3.java
, но его также можно назвать любым другим, если класс не является общедоступным) - или косвенно, если этот класс используется другим скомпилированным классом.
Объект класса создается загрузчиком классов при первой загрузке класса - это происходит всякий раз, когда это необходимо, или ранее. Обычный URLClassLoader
загружает ваш класс из файла с тем же именем, но в принципе данные также могут быть сгенерированы на лету, загружены из базы данных или аналогичными.
Затем он (класс) инициализируется путем вызова блоков static
. (Инициализация - это второй шаг, не обязательно в одно и то же время, но оба выполняются до вашего первого использования класса.)