关于java类的初始化过程

来源:互联网 发布:司法考试网络课程 编辑:程序博客网 时间:2024/06/12 07:21

1.静态变量加载时机和顺序

Java文件经过编译生成相应.class文件,当执行时把.class文件加载到内存(方法区),先加载父类,然后是子类,静态变量和静态代码块在方法区初始化,也就是类实例没产生时,类加载的时候就产生了,静态变量和静态代码块每个类中只有一份,以后各个实例变量中的静态变量就是方法区中的那一份(静态变量和静态代码块只初始化一次),也就是说父类的静态变量先加载,然后是子类的静态变量

2.成员变量的加载顺序

  当你new出一个子类对象时,程序先调用子类构造器中的super方法访问父类的构造器,而父类要调用它父类的构造方法调用object的构造器,调用完后,回到父类初始化父类的成员变量,初始化完成后,执行父类构造器的方法体,执行完后,回到子类,初始化化子类的成员变量,

初始化化完成后,执行子类构造器的方法体

所以类的初始化过程是这样的

假设A类继承B类,B类继承C类,则当我们创建A类的对象时,其初始化顺序如下:

C类的静态变量和静态代码块(按书写顺序初始化)

B类的静态变量和静态代码块(按书写顺序初始化)

A类的静态变量和静态代码块(按书写顺序初始化)

C类的实例变量

C类的构造方法

B类的实例变量

B类的构造方法

A类的实例变量

A类的构造方法

对于静态变量和静态代码块,只会初始化一次