版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z249486888/article/details/83211348
1、类中成员变量的初始化过程
默认初始化(赋值为默认值)——>显式初始化(通过成员变量初始化)——>构造方法初始化(通过构造方法初始化)
2、子类和父类的初始化(分层初始化)
先初始化父类,然后初始化子类
3、代码中的代码块执行顺序
静态代码块(在加载类时执行,仅执行一次)——>构造方法代码块(在创建对象时执行)——>构造方法
注意事项:
super()在代码中的意思是首先需要父类初始化,应该按照分层初始化的顺序执行,并不是按照其代码顺序执行。
class Father{
static {
System.out.println("我是father静态代码块");
}
{
System.out.println("我是father构造方法代码块");
}
public Father(){
Mother mother = new Mother();
System.out.println("我是father构造方法");
}
}
class Mother {
public Mother() {
System.out.println("我是mother构造方法");
}
}
public class Son extends Father{
static {
System.out.println("我是son静态代码块");
}
Mother mother = new Mother();
public Son() {
super();
System.out.println("我是son构造方法");
}
public static void main(String [] args) {
new Son();
}
}
执行过程:
1、从main方法开始执行
2、加载father类,执行父类静态代码块 , 输出“我是father静态代码块”
3、加载son类,执行子类静态代码块,输出“我是son静态代码块”
4、初始化父类,执行父类构造方法代码块,输出“我是father构造方法代码块”
5、父类构造方法初始化,创建mother对象,对mother初始化,输出“我是mother构造方法”,然后输出“我是father构造方法”
6、显式初始化子类,创建mother对象,对mother初始化,输出“我是mother构造方法”
7、构造方法初始化子类,输出“我是son构造方法”
执行结果:
我是father静态代码块
我是son静态代码块
我是father构造方法代码块
我是mother构造方法
我是father构造方法
我是mother构造方法
我是son构造方法