类成员初始化顺序php,初始化java对象的顺序

1.初始化涉及的几个部分

java对象在初始化时不仅仅调用自身的构造方法,还涉及静态语句块、实例语句块、静态变量初始化、成员变量初始化等执行问题,初始化顺序指的就是这五部分的执行顺序。

2.Demo

package com.javase.classtest;public class InitializationSequence {static {

System.out.println("静态语句块");

}static MyInnerClass in = new MyInnerClass("静态变量s");

MyInnerClass in01 = new MyInnerClass("a");

{

System.out.println("实例语句块");

}

MyInnerClass in02 = new MyInnerClass("b");public InitializationSequence() {

System.out.println("构造函数");

}

@SuppressWarnings("unused")public static void main(String[] args) {

InitializationSequence obj01 = new InitializationSequence();

System.out.println("-----------------------------------");

InitializationSequence obj02 = new InitializationSequence();

}

}class MyInnerClass {public MyInnerClass(String description) {

System.out.println("成员变量初始化::" + description);

}

}

执行结果:

10369f3d7dd4115e98e6a89e49a6f10e.png

分析:静态语句块:在类加载到JVM时执行,由于JVM使用类的前提是类装载到JVM虚拟机,所以静态语句块首先执行,类只加载一次,静态语句块只执行一次。

静态变量初始化:由于静态变量为类的所有实例所共享,不依赖于具体的对象,因此不是在对象创建时初始化,而是在类加载时初始化,初始化顺序在静态语句块之后,只执行一次。

实例语句块:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,以成员变量初始化为参照,没有绝对的先后顺序,实际顺序取决于定义的顺序,定义在前,就在成员变量初始化前执行;定义在后,就在成员变量初始化后执行。

成员变量初始化:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,相对于实例语句块的执行顺序取决于定义顺序。

构造方法:最后执行。

综上可知,java对象初始化的执行顺序为:静态语句块>静态变量初始化>实例语句块/成员变量初始化>构造方法,实例语句块与成员变量初始化的相对执行顺序取决于定义的先后顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值