Java程序是边加载边执行_深入了解类加载过程及Java程序执行顺序

/**

* @author chris

* @date 2018/10/30 - 15:24

* 类加载执行顺序:

* 1.静态属性,静态方法声明,静态块。

*

* 2.动态属性,普通方法声明,构造块。

*

* 3.构造方法。

*

* 当new一个对象时,此时会调用构造方法,但是在调用构造方法之前,(除非被打断而暂停)执行动态属性定义并设置默认值(一举生成的)。

*/

public class Text {

//类加载jvm先对属性赋默认值 根据数据类型

public static int k = 0; // 1.静态属性

public static Text t1 = new Text("t1"); //2.静态属性 new对象暂停了类加载过程去执行构造方法,但在之前先执行动态属性定义并设置默认值 ,

// 然后动态属性初始化,分配内存,构造块,普通方法声明(只是加载,它不需要初始化,只有调用它时才分配内存,

// 当方法执行完毕后内存立即释放),没有优先级之分,按出现顺序执行。

public static Text t2 = new Text("t2"); //重复上述操作

public static int i = print("i"); //静态属性

public static int n = 99; //静态属性 至此静态方法执行完毕 开始执行静态块

public int j = print("j");

{

print("构造块");//构造块

}

static {

print("静态块");//静态块 静态块执行完之后 执行main方法 (main方法也属于特殊静态方法)

}

public Text(String str) {

System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);

++i;

++n;

}

public static int print(String str) {

System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);

++n;

return ++i;

}

public static void main(String args[]) {

Text t = new Text("init");//main方法开始之后 开始执行动态属性 及代码块

}

}

Text类加载执行是 最先jvm给属性默认值(按数据类型) 加载静态属性 其中 第二个静态属性被实例化过程打断 转而在执行构造方法之前加载了动态属性和构造块 静态属性加载完成之后加载静态块 然后找到了静态main方法 开始实例化 重复了之前两个静态属性后的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值