(一道面试题)生成实例时代码的执行顺序
一.编写父类对象:
public class Father { public Father() { // TODO Auto-generated constructor stub System.out.println("我是Father的构造方法"); } { System.out.println("我是Father的代码快"); } static { System.out.println("我是Father的static代码快"); } }
二.编写子类对象:
public class Son extends Father { public Son() { // TODO Auto-generated constructor stub System.out.println("我是Son的构造方法"); } { System.out.println("我是Son的代码快"); } static { System.out.println("我是Son的static代码快"); } }
三.编写测试类:
public class Test { public static void main(String[] args) { Son son=new Son(); } }
四.实验结果:
五.总结:
出现了6句话,这6句话也代表了调用过程.
1).最先开始调用static的方法.父类static块---->子类static块
2).执行父类方法
代码块的执行顺序优于构造方法.先调用执行代码块代码-->再执行父类构造方法的代码
3).执行子类方法
代码块的执行顺序优于构造方法.先调用执行代码块代码-->再执行子类构造方法的代码
结论:父类静态代码块--->子类静态代码块--->父类代码块--->父类构造方法代码--->子类代码块--->子类构造方法代码