1. Инициализация класса
Для инициализации класса: Инициализация класса обычно инициализируется только один раз, а инициализация класса в основном инициализирует статические переменные-члены.
Компиляция класса определяет процесс инициализации класса.
Файл классов, созданный компилятором, в основном вносит следующие изменения в классы, определенные в исходном файле:
1) Сначала объявите переменные-члены внутри класса в том порядке, в котором определены статические переменные-члены.
2) Инициализируйте в соответствии с последовательностью инициализации переменных-членов исходного класса Java.
Соответствующее преобразование между классом Java и скомпилированным классом выглядит следующим образом:
Исходный файл:
Скопируйте код кода следующим образом:
общественный класс Person {
public static String name="Чжан Сан";
public static int age;
статический {
возраст=20;
System.out.println("Возраст инициализации");
}
общедоступный статический строковый адрес;
статический {
адрес="Пекин";
возраст=34;
}
public static void main(String[] args) {
System.out.println(имя);
System.out.println(возраст);
System.out.println(адрес);
}
}
Когда исходный код Java преобразуется в файл класса, он преобразуется в код, аналогичный следующему:
Скопируйте код кода следующим образом:
общественный класс Person {
общедоступное статическое имя строки;
public static int age;
общедоступный статический строковый адрес;
статический {
name="Чжан Сан";
возраст=20;
System.out.println("Возраст инициализации");
адрес="Пекин";
возраст=34;
}
public static void main(String[] args) {
System.out.println(имя);
System.out.println(возраст);
System.out.println(адрес);
}
}
Последовательность инициализации выполняется последовательно в соответствии с последовательностью инициализации соответствующих переменных-членов класса после преобразования, поэтому все статические переменные-члены сначала объявляются, а затем назначаются, а порядок назначения также основан на порядке, в котором статические переменные-члены инициализируется в исходном коде. Примечание. Определение переменной-члена и ее непосредственная инициализация эквивалентны ее инициализации в статическом блоке кода, в том порядке, в котором они определены в исходном коде.
2. Генерация объектов
Процесс инициализации генерации объекта аналогичен процессу инициализации класса, но будет добавлен этап конструктора. Исходный код выглядит следующим образом:
Скопируйте код кода следующим образом:
общественный класс Person {
{
name="李思";
возраст=56;
System.out.println("Возраст инициализации");
адрес="Шанхай";
}
public String name="Чжан Сан";
публичный int age = 29;
общедоступный строковый адрес = "Пекин";
публичный человек(){
name="Чжао Лю";
возраст=23;
адрес="Шанхай";
}
}
После того, как компилятор преобразует его в файл класса, он будет преобразован в код, аналогичный следующему:
Скопируйте код кода следующим образом:
общественный класс Person {
публичное имя строки;
общественный возраст;
общедоступный строковый адрес;
публичный человек(){
name="李思";
возраст=56;
System.out.println("Возраст инициализации");
адрес="Шанхай";
name="Чжан Сан";
возраст=29;
адрес="Пекин";
name="Чжао Лю";
возраст=23;
адрес="Шанхай";
}
}
Видно, что инициализация переменных-членов в классе и код в блоке кода были перенесены в конструктор, а переменные-члены инициализируются последовательно в соответствии с порядком инициализации исходного файла Java, в то время как код в исходный конструктор Переносится на последнее выполнение конструктора. Раньше у меня никогда не было глубокого понимания процесса инициализации класса, я просто не мог понять, как его инициализировать, я мог вспомнить только последовательность инициализации по книге, но через некоторое время забыл ее, поэтому на этот раз я. наконец-то разобрался. Лучше объяснить механизм инициализации по модели. Запоминать больше не нужно. Только если поймешь, то не забудешь.