在Java中代码块、静态代码块、构造方法的执行顺序和继承

时间:2022-03-19 19:33:12

在学习完继承后,我产生了一系列的思考关于在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构造函数

显然结果得出子类中并没有继承父类的代码块,并且静态代码块在类加载的时候都进行运行,然后在执行父类中的代码块,然后是父类的构造函数,(先有父后有子)。然后依次是子类的构造代码块、子类构造函数。