前言:
构造方法,构造代码块和静态代码块的执行顺序是一个常见的面试题,精通Java的人都知道执行顺序为:“静态代码块——>构造方法——>构造代码块”,接下来对该顺序进行详细分析
分析:
1.构造方法的执行:
所有的Java类中至少都会有一个构造方法,用于对象的初始化。
在这里每次创建新的对象时,红箭头所指的“ ( ) ”部分其实就是在调用构造方法插入图片描述
2.构造代码块的执行:
构造代码块是类中编写的一个代码块成员,它与构造方法不同,如下图所示:
在这里插入图片描述
我们定义一个对象后执行代码,结果如下:
在这里插入图片描述
从上图我们可以发现,构造代码块的执行早于构造方法。
实际上,构造代码块和构造方法执行的时机都很类似,甚至可以说功能上是重复的,那为什么还要使用构造代码块呢?是因为构造方法一般有很多种,比如无参构造,一参构造,二参构造等等,而有些操作是不论我们使用哪种构造方法都需要使用的,那么这时候使用构造代码块来放置这些操作,便不会因为构造方法太多而多次编写同样的操作,节省了我们的精力。
3.静态代码块的执行:
静态代码块,构造代码块和构造方法示例
如上图,静态代码块由static修饰,我们知道,在Java中,使用static修饰的成员属性和成员方法,是独立于具体的变量和具体的方法的,它们并不是随着对象的创建而创建,而是在类加载时便已经初始化,换言之,可以将静态成员、静态方法和静态代码块看成是