5.9.2 初始化块和构造器
5.9.2 初始化块和构造器
从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器执行之前执行。系统同样可使用初始化块来进行对象的初始化操作。
初始化块不能接收参数
与构造器不同的是,初始化块是一段固定执行的代码,它不能接收任何参数。因此初始化块对同个类的所有对象所进行的初始化处理完全相同。
什么时候使用初始化块
- 如果有段初始化处理代码对所有对象完全相同,且无须接收任何参数,就可以把这段初始化处理代码提取到初始化块中。
- 如果两个构造器中有相同的初始化代码,且这些初始化代码
无须接收参数
,就可以把它们放在初始化块中定义。
通过把多个构造器中的相同代码提取到初始化块中定义,能更好地提高初始化代码的复用,提高整个应用的可维护性。
编译后初始化块中的代码会插入到每个构造器的开头
实际上初始化块是一个假象,使用javac
命令编译Java
类后,该java
类中的初始化块会消失,初始化块中代码会被”还原”到每个构造器中,且位于构造器所有代码的前面。
先初始化父类再初始化话子类
与构造器类似,创建一个Java
对象时,不仅会执行该类的普通初始化块和构造器,而且系统会一直上溯到java.lang.Object
类,先执行java.lang.Object
类的初始化块
,然后开始执行java.lang.Object
的构造器,接着依次向下执行其父类的初始化块,然后开始执行其父类的构造器,以此类推。最后才执行该类的初始化块和构造器,返回该类的对象。