静态代码块、构造代码块和构造函数的执行顺序
本文前面稍微介绍了一下构造代码块和静态代码块的注意点,如果急需了解执行这三者执行顺序的话可以直接看向最后。
一 .构造代码块
{ //这个就是构造代码块 }
关于构造代码块,以下几点需要注意:
1.构造代码块是用来给对象进行初始化的。
2.对象一创建就运行构造代码块,并且优先于构造函数。
3.构造代码块和构造函数的区别:
构造代码块是给对象进行统一初始化的,而构造函数是给对应的对象初始化,因此构造函数可以有多个,运行哪个构造函数就创建出什么样的对象,但无论创建什么样的对象,都会执行相同的构造代码块。即构造代码块中定义的是不同对象共性的初始化内容。
二.静态代码块
static{ //这就是静态代码块 }
关于静态代码块,以下几点需要注意:
1.静态代码块是随着类的加载而执行的,并且只执行一次,且优先于主函数。
2.静态代码块是给类初始化的,且一个类中可以有多个静态代码块
三.执行顺序
1.对于只有一个类的情况:
静态代码块>构造代码块>构造函数
2.对于存在继承的情况:
1).执行父类的静态代码块
2).执行子类的静态代码块
3).执行父类的构造代码块,然后执行构造函数
4).执行子类的构造代码块,然后执行构造函数
(在创建子类对象的时候,会调用super方法,所以是先初始化父类,那就得先执行构造代码块,然后执行构造方法)