Процесс инициализации процесса инициализации класса и экземпляра JAVA

Инициализация класса (статическая часть)

Clinit метод выполнения 

  1. Основной метод  классагде необходимо загрузить и инициализировать
  2. Инициализировать необходимость подкласса для инициализации родительского класса
  3. Класс инициализируется точка <clinit> () метод
    ①, метод <clinit> () статическим  отображение кодов класса присваивания переменного  и статический блок кода  , состоящий
    ②, переменный класс и отображение статического блочного кода кодов , назначенные коды
    от верхней части к исполнению снизу порядка (< cliinit> () порядок выполнения) способа
    ③, <clinit> () метод  выполняется только один раз

Примеры инициализируются (не статическая часть)

Примеры инициализации выполняется <INIT> метод (т.е. выше инициализации clinit класс)

  1. <Иниц> () метод может иметь множество перегрузки, есть несколько конструкторов несколько <инициализации> метод
  2. <Иниц> () для отображения кода назначения блоков от блока нестатического и не-статическим переменного экземпляра, код конфигурации, соответствующая составу
  3. Нестатический переменный экземпляр и отображение блок назначения кода нестатического последовательного выполнения кода сверху вниз, что соответствует исполнению последней конфигурации коды
  4. Каждый создать экземпляр, вызовите соответствующий конструктор выполняется соответствующая <инициализации> () метод
  5. Первая строка <инициализация> <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();
	}
}

результат

发布了242 篇原创文章 · 获赞 13 · 访问量 1万+

рекомендация

отblog.csdn.net/qq_41813208/article/details/103975485