在学习完继承后,我产生了一系列的思考关于在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构造函数
显然结果得出子类中并没有继承父类的代码块,并且静态代码块在类加载的时候都进行运行,然后在执行父类中的代码块,然后是父类的构造函数,(先有父后有子)。然后依次是子类的构造代码块、子类构造函数。