Java. Порядок инициализации полей и блоков класса и Интерфейсов
Разберем порядок инициализации:
public class A {
{
System.out.println("A class. No static block 1");
}
{
System.out.println("A class. No static block 2");
}
static {
System.out.println("A class. Static block 1");
}
public static String a1 = psv("a1");
public String a11 = pnsv("a11");
static {
System.out.println("A class. Static block 2");
}
public static String a2 = psv("a2");
private static String psv(String a) {
System.out.println("A class. Static perem " + a);
return a;
}
private String pnsv(String a) {
System.out.println("A class. No static perem " + a);
return a;
}
static {
System.out.println("A class. Static block 3");
}
{
System.out.println("A class. No static block 3");
}
public A() {
System.out.println("A class. Constructor");
}
public String a22 = pnsv("a22");
public static String a3 = psv("a3");
{
System.out.println("A class. No static block 4");
}
public String a33 = pnsv("a33");
}
public class B extends A {
private int b = bb(20);
public B(int b) {
this.b = b;
}
static {
System.out.println("B class. Static block 1");
}
private int bb(int x) {
System.out.println("B class. No static perem " + x);
return 0;
}
public static void methodB() {
System.out.println("B class. Static methodB");
}
public B() {
System.out.println("B class. Constructor");
}
static {
System.out.println("B class. Static block 2");
}
}
а)Простая инициализация, без наследования при вызове конструктора:
Вызываем конструктор:
public class Main {
public static void main(String[] args) {
new A();
}
}Вывод на консоль:A class. Static block 1 A class. Static perem a1 A class. Static block 2 A class. Static perem a2 A class. Static block 3 A class. Static perem a3 A class. No static block 1 A class. No static block 2 A class. No static perem a11 A class. No static block 3 A class. No static perem a22 A class. No static block 4 A class. No static perem a33 A class. Constructor
Вывод:1. Инициализация статических полей и блоков в порядке объявления (один раз)2. Нестатические поля и блоки в порядке объявления3. Конструкторб)Простая инициализация, без наследования при вызове нескольких конструкторов:
public class Main {
public static void main(String[] args) {
new A();
new A();
}
}Вывод на консоль:A class. Static block 1 A class. Static perem a1 A class. Static block 2 A class. Static perem a2 A class. Static block 3 A class. Static perem a3 A class. No static block 1 A class. No static block 2 A class. No static perem a11 A class. No static block 3 A class. No static perem a22 A class. No static block 4 A class. No static perem a33 A class. Constructor A class. No static block 1 A class. No static block 2 A class. No static perem a11 A class. No static block 3 A class. No static perem a22 A class. No static block 4 A class. No static perem a33 A class. Constructor
Вывод:1. Инициализация статических полей и блоков в порядке объявления (один раз)2. Нестатические поля и блоки в порядке объявления3. Конструктор4. Нестатические поля и блоки в порядке объявления5. Конструкторв)Простая инициализация, без наследования при статического поля:
public class Main {
public static void main(String[] args) {
String s = A.a1;
}
}Вывод на консоль:A class. Static block 1 A class. Static perem a1 A class. Static block 2 A class. Static perem a2 A class. Static block 3 A class. Static perem a3
Вывод:1. Инициализация статических полей и блоков в порядке объявления (один раз)г)Простая инициализация, без наследования при вызове нескольких статических полей:
public class Main {
public static void main(String[] args) {
String s = A.a1;
String s2 = A.a1;
}
}Вывод на консоль:A class. Static block 1 A class. Static perem a1 A class. Static block 2 A class. Static perem a2 A class. Static block 3 A class. Static perem a3
Вывод:1. Инициализация статических полей и блоков в порядке объявления (один раз), те вывод наконсоль не изменилсяд)Простая инициализация, с наследованием, при вызове конструктора
Вызываем конструктор:public class Main {
public static void main(String[] args) {
new B();
}
}Вывод на консоль:A class. Static block 1 A class. Static perem a1 A class. Static block 2 A class. Static perem a2 A class. Static block 3 A class. Static perem a3 B class. Static block 1 B class. Static block 2 A class. No static block 1 A class. No static block 2 A class. No static perem a11 A class. No static block 3 A class. No static perem a22 A class. No static block 4 A class. No static perem a33 A class. Constructor B class. No static perem 20 B class. Constructor
Вывод:1. Инициализация статических полей и блоков в порядке объявления (один раз) суперкласса А2. Инициализация статических полей и блоков в порядке объявления (один раз) подкласса B3. Нестатические поля и блоки в порядке объявления в суперклассе А4. Конструктор суперкласса А5. Нестатические поля и блоки в порядке объявления в суперклассе B6. Конструктор подкласса В
Комментарии
Отправить комментарий