美文网首页
【教3妹学java】4.Java中变量,代码块,构造器之间执行顺

【教3妹学java】4.Java中变量,代码块,构造器之间执行顺

作者: 程序员小2 | 来源:发表于2022-06-19 11:21 被阅读0次
3妹

2哥:3妹,你了解Java中的父子类吗?
3妹:这个了解啊, 有了父类、子类的概念,所以Java才有了继承、多态。
2哥:nice, 很好,那你知道父子类中变量,代码块,构造器之间执行顺序是怎样的吗?
3妹:emmm……这个太多了,我还没有理明白。
2哥:今天我们就来学习这个。

讲课

Java程序中类中个元素的初始化顺序 初始化的原则是:

  • 先初始化静态部分,再初始化动态部分,
  • 先初始化父类部分,后初始化子类部分,
  • 先初始化变量,再初始化代码块和构造器。

所以依照这个规则可以得出总体顺序是:

1.父类的静态成员变量(如果是第一次加载类)
2.父类的静态代码块(如果是第一次加载类)
3.子类的静态成员变量(如果是第一次加载类)
4.子类的静态代码块(如果是第一次加载类)
5.父类的普通成员变量
6.父类的动态代码块
7.父类的构造器方法
8.子类的普通成员变量
9.子类的动态代码块
10.子类的构造器方法

示例:

下面写了一个Demo进行验证:

public class Base {
    static Instance staticInstance = new Instance("1---Base类的静态成员变量staticInstance");
    static  {
        System.out.println("2---Base类的静态代码块执行了");
    }
    Instance instance = new Instance("5---Base类的普通成员变量instance");
    {
        System.out.println("6---Base类的动态代码块执行了");
    }
    Base() {
        System.out.println("7---Base类的构造器方法执行了");
    }
}

public class Child extends Base {
    static Instance staticInstance = new Instance("3---Child类的静态成员变量staticInstance");
    static  {
        System.out.println("4---Child类的静态代码块执行了");
    }
    Instance instance = new Instance("8---Child类的普通成员变量instance");
    {
        System.out.println("9----Child类的动态代码块执行了");
    }
    Child() {
        System.out.println("10---Child类的构造器方法执行了");
    }
    public static void main(String[] args) {
        Child child = new Child();
    }
}

输出结果如下:

1---Base类的静态成员变量staticInstance进行了初始化
2---Base类的静态代码块执行了
3---Child类的静态成员变量staticInstance进行了初始化
4---Child类的静态代码块执行了
5---Base类的普通成员变量instance进行了初始化
6---Base类的动态代码块执行了
7---Base类的构造器方法执行了
8---Child类的普通成员变量instance进行了初始化
9----Child类的动态代码块执行了
10---Child类的构造器方法执行了点击复制代码复制出错复制成功

说明确实是按照上面的执行顺序执行的。

相关文章

网友评论

      本文标题:【教3妹学java】4.Java中变量,代码块,构造器之间执行顺

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