在学习完继承后,我产生了一系列的思考关于在Java中继承中代码块、静态代码块、构造方法的执行顺序以及继承的问题
于是编写了一下代码进行分析
规则:
1、静态代码块随着类的加载而加载 (堆内存中)
2、代码块在每次创建对象前加载执行
3、子类在其构造函数中实现对父类(构造函数)的初始化
4、先有父后有子(在运行时,父类先加载进内存,子类才能加载)
public class Test { public static void main(String[] args) { Child child = new Child(); } } class Parents { /* *父类的静态代码块 */ static { System.out.println("Parents静态代码块"); } /* *父类的构造代码块 */ { System.out.println("Parents代码块"); } /* *父类的构造函数 */ public Parents(){ System.out.println("Parents构造函数"); } } class Child extends Parents { /* *子类的静态代码块 */ static { System.out.println("Child静态代码块"); } /* *子类的构造代码块 */ { System.out.println("Child代码块"); } /* *子类的构造函数 */ public Child(){ //super();//其实这里隐藏着super(),目的是初始化父类的构造函数 System.out.println("Child构造函数"); } }
最后的执行结果为:
Parents静态代码块
Child静态代码块
Parents构造代码块
Parents构造函数
Child构造代码块
Child构造函数
显然结果得出子类中并没有继承父类的代码块,并且静态代码块在类加载的时候都进行运行,然后在执行父类中的代码块,然后是父类的构造函数,(先有父后有子)。然后依次是子类的构造代码块、子类构造函数。