java面向对象上(九)初始化块 静态初始化块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/strivenoend/article/details/83246349

三者执行顺序:静态初始化块>初始化块》构造器

初始化块是在对象分配内存后,在构造器之前对内存装入数据的,

静态初始化块是在类加载时,给类的类变量分配内存后,对类变量所在内存存入数据的

三者执行顺序:静态初始化块>初始化块》构造器

初始化块只在创建java对象前隐式执行,而且在构造器之前执行,给对象的实例变量所在内存存入数据

静态初始化块只在类加载到内存时隐式执行,而且随类的加载而加载,给类的类变量所在内存存入数据

--------------------------------------------------------------------------------------------------------------------------、

和构造器类似,创建一个java对象时,不仅会执行该类的普通初始化块和构造器,而写系统一直回溯到java.lang.Object类,

先执行java.lang.Object类的初始化块,开始执行java.lang.Object的构造器,依次向下执行其父类的初始化块,开始执行其父类的构造器,最后才执行该类的初始化块和构造器

------------------------------------------------------------------------------------------------------------------------------------------------------------

静态初始化块,系统在类初始化阶段执行静态初始化块,因此静态初始化块总是比普通初始化块先执行

静态初始化块只能对类变量进行初始化处理

第一次使用到类并且第一次创建该类的对象时会先加载类,对类变量初始化,然后会创建对象,为实例变量进行初始化

静态初始化块也是会回溯到java.lang.Object类,先执行java.lang.Object类的静态初始化块,执行java.lang.Object类的初始化块,开始执行java.lang.Object的构造器,依次向下执行其父类的静态初始化块,执行其父类的初始化块,开始执行其父类的构造器,最后才执行该类的静态初始化块和初始化块和构造器

--------------------------------------------------------------

jvm第一次主动使用某个类时,系统会在类准备阶段为该类的所有静态成员变量分配内存,,在初始化阶段则负责初始化这些静态成员变量,利用静态初始化块

jvm第一次主动创建对象时,系统会在对象准备阶段为该对象的所有实例成员变量分配内存,,在初始化阶段则负责初始化这些实例成员变量,利用初始化块,构造器

猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/83246349
今日推荐