美文网首页
类初始化执行顺序

类初始化执行顺序

作者: 喏喏2021 | 来源:发表于2022-01-19 22:40 被阅读0次
    1. 这里的执行顺序主要包括如下几个点:
    • 静态代码块
    • 静态方法
    • 实例方法
    • 代码块
    • 构造函数
    • 父类与子类中以上的顺序
    1. 直接上实例
    //基类
    class Base {
        private static int a = 1; //基类静态变量,
        private int b = 2; //基类成员变量
            //基类代码块
        {
            System.out.println("a="+a+",b="+b);
            System.out.println("基类代码块1");
        }
            //基类静态代码块
        static {
            System.out.println("a="+a);
            System.out.println("基类静态代码块2");
        }
            //基类代码块2,主要演示两个代码块的执行顺序
        {
            System.out.println("基类代码块2");
        }
            //基类构造方法
        Base(){
            System.out.println("基类初始化");
        }
    }
    //子类
    class Sub extends Base {
        {
            System.out.println("子类代码块1");
            //System.out.println("d="+d); //因为变量在后面定义,这里还不能引用到,会有如下编译错误Cannot reference a field before it is defined
        }
        static {
            System.out.println("子类静态代码块");
            //System.out.println("c="+c);//静态变量也需要放在前面Cannot reference a field before it is defined
        }
        private static int c = 3; //子类静态成员变量
        private int d = 4; //子类成员变量
        Sub(){
            System.out.println("子类初始化");
        }
        {
            System.out.println("子类代码块2");
        }
    }
    
    public class ClassInitTest {
        public static void main(String[] args) {
            Sub sub = new Sub();
            Sub sub1 = new Sub(); //定义两次,主要看静态代码是否还会执行
        }
    }
    

    输出结果:

    a=1   //基类静态成员
    基类静态代码块2  //基类静态代码块
    子类静态代码块  //子类静态代码块
    a=1,b=2  //基类实例变量
    基类代码块1 //基类代码块
    基类代码块2
    基类初始化  //基类构造方法
    子类代码块1 //子类代码块
    子类代码块2
    子类初始化 //子类构造方法
    a=1,b=2   //第2次初始化,与静态相关的,就没有什么关系了
    基类代码块1
    基类代码块2
    基类初始化
    子类代码块1
    子类代码块2
    子类初始化
    
    1. 总结
      总体执行顺序如下:
      1)基类静态成员变量、基类静态代码块 (按代码前后)
      2)子类静态成员变量、子类静态代码块(按代码前后)
      3)基类实例变量、代码块 (按代码前后)
      4)基类构造方法
      5)子类实例变量、代码块(按代码前后)
      6)子类构造方法

    相关文章

      网友评论

          本文标题:类初始化执行顺序

          本文链接:https://www.haomeiwen.com/subject/vksdhrtx.html