之前写过一个《 java中静态语句块、实例代码块、构造器方法这3者的调用顺序》,但只是针对一个类而言的。当遇到两个类时,当然这两个类之间是继承关系。那么在声明一个子类时,这3者的调用关系,又是什么样的呢?
1、测试代码:
/** * created by cxh on 17/7/27 */ class Base{ //静态语句块 static{ System.out.println("执行基类的静态语句块!"); } //构造器方法 Base(){ System.out.println("执行基类的构造器方法!"); } //构造代码块 { System.out.println("执行基类的构造代码块!"); } } public class TempTest extends Base { //静态语句块 static{ System.out.println("执行子类的静态语句块!"); } //构造器方法 TempTest(){ System.out.println("执行子类的构造器方法!"); } //构造代码块 { System.out.println("执行子类的构造代码块!"); } public static void main(String[] args){ TempTest a=new TempTest(); System.out.println("----------------"); TempTest b=new TempTest(); } }2、测试结果:
执行基类的静态语句块! 执行子类的静态语句块! 执行基类的构造代码块! 执行基类的构造器方法! 执行子类的构造代码块! 执行子类的构造器方法! ---------------- 执行基类的构造代码块! 执行基类的构造器方法! 执行子类的构造代码块! 执行子类的构造器方法!3、结果说明:
(1)一个类中,3者执行顺序:静态语句块、实例代码块、构造器方法。
(2)两个类中。声明了子类后,执行顺序:父类静态代码块、子类静态代码块、父类实例代码块、父类构造器方法、子类实例代码块、子类构造器方法。
(3)还要强调的一点是:不管一个类实例化几次,静态语句块都仅仅执行一次。