Инициализация класса (статическая часть)
Clinit метод выполнения
- Основной метод классагде необходимо загрузить и инициализировать
- Инициализировать необходимость подкласса для инициализации родительского класса
- Класс инициализируется точка <clinit> () метод
①, метод <clinit> () статическим отображение кодов класса присваивания переменного и статический блок кода , состоящий
②, переменный класс и отображение статического блочного кода кодов , назначенные коды от верхней части к исполнению снизу порядка (< cliinit> () порядок выполнения) способа
③, <clinit> () метод выполняется только один раз
Примеры инициализируются (не статическая часть)
Примеры инициализации выполняется <INIT> метод (т.е. выше инициализации clinit класс)
- <Иниц> () метод может иметь множество перегрузки, есть несколько конструкторов несколько <инициализации> метод
- <Иниц> () для отображения кода назначения блоков от блока нестатического и не-статическим переменного экземпляра, код конфигурации, соответствующая составу
- Нестатический переменный экземпляр и отображение блок назначения кода нестатического последовательного выполнения кода сверху вниз, что соответствует исполнению последней конфигурации коды
- Каждый создать экземпляр, вызовите соответствующий конструктор выполняется соответствующая <инициализации> () метод
- Первая строка <инициализация> <INIT> () метод Метод супер () или супер (список параметров аргумента), соответствующие родительский класс ()
Байт-код файла:
Примеры Анализ:
Что основной способ выполнить следующие выходы Son класс?
Father.java файл
public class Father{ private int i = test(); private static int j = method(); static{ System.out.print("(1)"); } Father(){ System.out.print("(2)"); } { System.out.print("(3)"); } public int test(){ System.out.print("(4)"); return 1; } public static int method(){ System.out.print("(5)"); return 1; } }
Son.java файлы выполнить следующий код выведет на экран какой?
public class Son extends Father{ private int i = test(); private static int j = method(); static{ System.out.print("(6)"); } Son(){ // super();//写或不写都在,在子类构造器中一定会调用父类的构造器 System.out.print("(7)"); } { System.out.print("(8)"); } public int test(){ System.out.print("(9)"); return 1; } public static int method(){ System.out.print("(10)"); return 1; } public static void main(String[] args) { // Son s1 = new Son(); // System.out.println(); // Son s2 = new Son(); } }
результат