java代码的执行顺序

若类还未被加载

  1. 先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
  2. 执行子类的静态代码块和静态变量初始化。
  3. 执行父类的实例变量初始化和普通代码块,,并且代码块和实例变量的执行顺序只跟代码中出现的顺序有关。
  4. 执行父类的构造函数
  5. 执行子类的实例变量初始化和普通代码块,,并且代码块和实例变量的执行顺序只跟代码中出现的顺序有关。
  6. 执行子类的构造函数

若类已经加载

则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造

package com.huangxin.test;



public class CodeExeOrder {

    public static void main(String[] args) {
        B b=new B();
        System.out.println("-----");
        //类已经加载不在执行,则静态代码块和静态变量就不用重复执行,
        //再创建类对象时,只执行与实例相关的变量初始化和构造方法 
        A a=new B();
        
    }

}
class A {
    //静态代码块
    static {
        System.out.println("父类的静态代码块");
    }
    //代码块
     {
        System.out.println("父类的代码块");
        
    }

    public A() {
        System.out.println("父类的构造方法");
    }
}
class B extends A{
    //静态代码块
    static {
        System.out.println("子类的静态代码块");
    }
    
    //代码块
     {
        System.out.println("子类的代码块");
    }
    public B() {
        System.out.println("子类的构造方法");
    }
}

image.png

参考链接:https://blog.csdn.net/u011877584/article/details/82145301?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

你可能感兴趣的:(java代码的执行顺序)