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

类初始化执行顺序

作者: 喏喏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)子类构造方法

相关文章

  • 9道题来理解什么是类的主动引用和被动引用

    剖析类的初始化顺序? 题目: 执行结果: 剖析类的初始化顺序? 先执行父类的方法,再执行子类的

  • 派生类构造函数执行顺序

    执行顺序: 1.先执行基类的构造函数,按照被继承时声明顺序,并且虚基类优先2.初始化新定义的成员,执行顺序按照各个...

  • 类的加载过程

    类的加载过程 类文件加载的顺序 1、先加载执行父类的静态变量及静态初始化块(执行先后顺序按排列的先后顺序)2、再加...

  • 类初始化执行顺序

    这里的执行顺序主要包括如下几个点: 静态代码块 静态方法 实例方法 代码块 构造函数 父类与子类中以上的顺序 直接...

  • java中的继承

    继承的关键之是extends子类 extends 父类 继承的初始化顺序 初始化父类再初始化子类 先执行初始化对象...

  • Java学习笔记 - 类方法与代码块的执行顺序

    类的初始化顺序 静态初始化块位于类的第一次初始化最前端执行,先父类后子类,是类的初始化块。 初始化块位于每次对象被...

  • Java中的继承

    继承初始化顺序 1、初始化父类再初始化子类2、先执行初始化对象中属性,再执行构造方法中的初始化 重写 1、什么是方...

  • React专题9: 生命周期函数

    初始化和页面刷新 执行顺序 state变化 执行顺序 props变化 执行顺序 shouldComponentUp...

  • java反射机制

    一、java类初始化 初始化操作:按照源代码从上到下的顺序依次执行静态代码块和初始化静态域。在一个类被初始化前,其...

  • C++对象模型5——对象的构造/析构

    对象的构造/析构顺序 初始化虚基类,按照继承顺序,从左到右,从最深到最浅。 初始化按照继承顺序初始化父类,如果父类...

网友评论

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

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