- 对于一个类初始化顺序为:
1.1 静态成员变量或静态代码块初始化(静态代码块也可以看成是一个成员变量)
1.2 成员变量
1.3 构造函数初始化
package com.laibaocen.javacode.test03;
public class Being {
private String name;
private String order;
Being(){
System.out.println("Being无参构造器初始化");
}
Being(String name){
System.out.println("Being有参构造器初始化:" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("设置:name" + name);
this.name = name;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
}
package com.laibaocen.javacode.test03;
public class StaticTest {
static Being being = new Being();
Being being1 = new Being("成员变量being1");
static {
System.out.println("静态代码块初始化");
if(being==null){
System.out.println("静态变量being为空");
being = new Being("静态变量Being初始化");
}
String sg = "静态代码块中的变量";
System.out.println(sg);
}
static Being being2 = new Being("成员变量Being2");
static {
System.out.println("静态代码块2初始化");
}
StaticTest(){
System.out.println("StaticTest被初始化");
}
public static void main(String[] args) {
new StaticTest();
}
}
// 输出结果
/**
Being无参构造器初始化 — 静态成员变量
静态代码块初始化 — 静态代码块
静态代码块中的变量 — 静态代码块
Being有参构造器初始化:成员变量Being2 — 静态成员变量
静态代码块2初始化 — 静态代码块
Being有参构造器初始化:成员变量being1 — 成员变量
StaticTest被初始化 — 构造器
*/
- 继承关系中的初始化顺序
2.1 先初始化父类中的静态成员或者静态代码块
2.2 再初始资料的静态成员或者静态代码块
2.3 再初始化父类中的成员变量
2.4 初始化父类的无参构造器
2.6 再初始化子类的成员变量
2.7 最后初始化子类的构造器
package com.laibaocen.javacode.test04;
public class Food {
Food(String name){
System.out.println(name);
}
}
package com.laibaocen.javacode.test04;
public class Being {
static Food food = new Food("父类静态变量:玉米");
static {
System.out.println("父类静态代码块儿");
if(food == null){
System.out.println("静态成员变量未初始化");
}
String staticCode = "父类静态代码块中变量";
System.out.println(staticCode);
}
Food food3 = new Food("父类成员变量1");
static Food food2 = new Food("父类静态变量:蘑菇");
Being(){
System.out.println("Being无参构造器初始化");
}
Being(String name){
System.out.println("Being有参构造器初始化:" + name);
}
}
package com.laibaocen.javacode.test04;
public class HumanBeing extends Being {
static Food food = new Food("子类静态变量:玉米");
static {
System.out.println("子类静态代码块儿");
if(food == null){
System.out.println("静态成员变量未初始化");
}
String staticCode = "子类静态代码块中变量";
System.out.println(staticCode);
}
Food food3 = new Food("子类成员变量");
static Food food2 = new Food("子类静态变量:蘑菇");
HumanBeing(){
System.out.println("子类构造器初始化");
}
public static void main(String[] args) {
new HumanBeing();
}
}
执行测试结果为:
父类静态变量:玉米
父类静态代码块儿
父类静态代码块中变量
父类静态变量:蘑菇
子类静态变量:玉米
子类静态代码块儿
子类静态代码块中变量
子类静态变量:蘑菇
父类成员变量1
Being无参构造器初始化
子类成员变量
子类构造器初始化