java 静态成员加载_java成员变量,静态成员变量,静态代码块,代码块和构造函数等加载顺序...

直接上例子

父类:

/**

* DESC: 父类

* USER: haiboz

* DATE: 2018/1/29 17:01

*/

public class Parent {

private static String strParSta = "父类静态成员变量";

private String strParIns = "父类成员变量";

static{

System.out.println("进入父类静态块");

System.out.println("strPar:"+strParSta);

}

public Parent(){

System.out.println("进入父类构造函数");

System.out.println("父类构造函数 strPar:"+strParSta);

System.out.println("父类构造函数 strParIns:"+strParIns);

}

{

System.out.println("进入父类代码块");

System.out.println("父类代码块 strParIns:"+strParIns);

}

public void sout(){

System.out.println("输出");

}

}

子类:

/**

* DESC: 子类

* USER: haiboz

* DATE: 2018/1/29 17:09

*/

public class Son extends Parent {

static String strSon = "子类静态成员变量";

String strSonIns = "子类成员变量";

public Son() {

System.out.println("进入子类构造函数");

System.out.println("子类构造函数 strSon:"+strSon);

System.out.println("子类构造函数 strSonIns:"+strSonIns);

}

static {

System.out.println("进入子类静态代码块");

System.out.println("子类静态代码块 strSon:"+strSon);

}

{

System.out.println("进入子类代码块");

System.out.println("子类代码块 strSonIns:"+strSonIns);

}

public static void main(String[] args) {

Parent son = new Son();

son.sout();

}

}

运行输出结果:

进入父类静态块

strPar:父类静态成员变量

进入子类静态代码块

子类静态代码块 strSon:子类静态成员变量

进入父类代码块

父类代码块 strParIns:父类成员变量

进入父类构造函数

父类构造函数 strPar:父类静态成员变量

父类构造函数 strParIns:父类成员变量

进入子类代码块

子类代码块 strSonIns:子类成员变量

进入子类构造函数

子类构造函数 strSon:子类静态成员变量

子类构造函数 strSonIns:子类成员变量

输出

总结加载顺序如下:

1.进入父类静态代码块

2.进入子类静态代码块

3.进入父类代码块

4.进入父类构造函数

5.进入子类代码块

6.进入子类构造函数

7.进入普通函数

其中步骤1-2为类加载过程,步骤3-6为对象实例化的过程。

注:如果类已经被加载:

则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值