Загрузка класса
Прежде чем говорить об инициализации класса, давайте объясним порядок загрузки класса.
Ниже приводится выдержка из "Мысного мышления на Java 4"
Поскольку все в Java является объектом, многие действия
Эта проблема является одним из более простых примеров. Как будет упомянуто в следующей главе, код для каждого объекта существует в отдельном файле. Если код действительно не нужен, этот файл не будет загружен. Как правило, мы можем думать, что код фактически не будет загружаться, если не будет построен объект этого класса. Поскольку в статическом методе есть некоторая тонкая двусмысленность, можно также считать, что «код класса загружается при первом использовании».
В первый раз, когда вы используете его, также происходит статическая инициализация. При загрузке все статические объекты и статические кодовые блоки инициализируются в их исходном порядке (то есть порядок, в котором они записаны в коде определения класса). Конечно, статические данные будут инициализированы только один раз.
Проще говоря, когда класс имеет отношения наследования, загрузчик класса будет формировать его назад и загружать классы.
например:
Класс B расширяет класс A, когда мы новый b (), загрузчик класса автоматически загружает код A
Порядок инициализации класса
Обычно последовательность инициализации заключается в следующем:
(Статический объект и статический блок кода, инициализированные в их порядке)> переменные члена> Конструктор
Тестовый код
public class classinit { / ** * @title: main * @description: тест на инициализацию класса * @param: @param args * @return: void * @throhs * / public void main (string [] args) {// todo автоматически сгенерированный метод. }} класс a {static {System.out.println ("a Static Code Block ..."); } public String S1 = prtString ("переменная члена A -члена ..."); Общественная статическая строка S2 = prtString ("a Статическая переменная ..."); public a () {System.out.println ("A Constructor ..."); } public Static String prtString (String Str) {System.out.println (str); вернуть ноль; }} класс B расширяет {public String ss1 = prtString ("переменная члена B ..."); Общественная статическая строка ss2 = prtString ("Статическая переменная B ..."); public b () {System.out.println ("B -конструктор ..."); } частный статик a a = new a (); static {System.out.println ("Статический кодовый блок B ..."); } {System.out.println ("Code Block ..."); }} Результаты теста
Статический кодовый блок A ...
Статическая переменная А ...
Статическая переменная B ...
Переменные члена ...
А -конструктор ...
Статический кодовый блок B ...
Переменные члена ...
А -конструктор ...
Переменные члена B ...
Кодовый блок ...
Конструктор B ...
Суммировать
Вышеуказанное - все содержание порядка инициализации класса в Java. Я надеюсь, что это будет полезно для всех, кто использует Java.