西安查派网站建设,北京建设网站哪家好,威海好的网站建设公司哪家好,wordpress打开后台为404功能概述
在创建Java对象时#xff0c;需要将对象中的成员变量进行初始化后#xff0c;才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。
功能实践
场景1#xff1a;父类、子类的初始化顺序
用例代码
Test
public void test_init_order(…功能概述
在创建Java对象时需要将对象中的成员变量进行初始化后才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。
功能实践
场景1父类、子类的初始化顺序
用例代码
Test
public void test_init_order() {new Child();
}public class Parent {static {System.out.println(父类静态块);}{System.out.println(父类非静态块);}public Parent() {System.out.println(父类构造方法);}
}public class Child extends Parent {static {System.out.println(子类静态块);}{System.out.println(子类非静态块);}public Child() {System.out.println(子类构造方法);}
}结果输出
父类静态块
子类静态块
父类非静态块
父类构造方法
子类非静态块
子类构造方法结果分析
先初始化静态块父类的静态块 - 子类的静态块。再初始化非静态块以及构造方法 父类的非静态块 - 父类的构造方法子类的非静态块 - 子类的构造方法
场景2块、成员域中初始化顺序
用例代码
static {a 2;} //静态块中初始化
static int a 1; //成员域中初始化
static int b 3;static {b 4;}{c 5;} //可以放在声明的上面
int c 3;Test
public void test_order() {System.out.println(a);System.out.println(b);System.out.println(c);
}结果输出
1
4
3结果分析
块中的初始化与成员域中的初始化是平级的所以会按照从上到下初始化最后一次初始化为最终的值。
场景3静态变量的调用
用例代码
Test
public void test_static_var() {System.out.println(InitB.c);
}public class InitA {public static String c C;static {System.out.println(A);}
}public class InitB extends InitA {static {System.out.println(B);}
}
用例输出
A
C结果分析
因为调用InitB.cstatic变量c在A类中所以会加载父类A所以输出了静态块中的A。因为InitB.c直接访问InitA的变量不需要访问InitB中的其它内容所以就不要加载InitB了。
功能总结
初始化时执行的顺序为父类静态变量 - 父类静态代码块 - 子类静态变量 - 子类静态代码块 - 父类非静态变量 - 父类非静态代码块 - 父类构造方法 - 子类非静态变量 - 子类的非静态代码块 - 子类构造方法。