java类执行顺序

参考: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();
    }
}

结果:

原文地址:https://www.cnblogs.com/JoeyWong/p/12456030.html