参考:https://www.cnblogs.com/timetellu/p/11619158.html
一、类的执行顺序
1、静态变量和静态块赋值(按照声明顺序)
2、构造代码块(构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。)
3、构造函数
public class Constructor { static Constructor dd = new Constructor("静态变量"); static { System.out.println("静态代码块"); } { System.out.println("构造代码块"); } public Constructor(){ System.out.println("无参构造函数"); } public Constructor(String str){ System.out.println(str); } public static void main(String[] args) { new Constructor(); System.out.println(); } }
结果:
二、父类、子类的加载顺序
1、父类的静态变量和静态块赋值(按照声明顺序)
2、自身的静态变量和静态块赋值(按照声明顺序)
3、父类的成员变量和块赋值(按照声明顺序)
4、自身成员变量和块赋值(按照声明顺序)
public class Constructor { static String ss="父类的静态变量"; static { System.out.println(ss); System.out.println("父类的静态代码块"); } { System.out.println("父类的构造代码块"); } public Constructor(){ System.out.println("父类的无参构造函数"); } } class ConstructorSon extends Constructor{ static String dd = "子类的静态变量"; static { System.out.println(dd); System.out.println("子类的静态代码块"); } { System.out.println("子类的构造代码块"); } public ConstructorSon(){ System.out.println("子类的无参构造函数"); } public static void main(String[] args) { new ConstructorSon(); } }
结果: