java动态加载机制_java动态加载机制

假设有一个class,ClassLoader首先把它load到内存里的code segment(内存里存放代码段的),站在ClassLoader的角度,内存里的一个一个的class就是一个一个的对象,这个对象就是xx.class,实际就是Class类的对象。Load完class,找到main函数开始执行,然后会把很多其他的类Load进来,动态加载机制。

d15715d1cf1677d36da8e888ec61afff.png

da109afccba131421762a1cf206eff21.png

测试动态加载机制:

新建项目Reflection,new一个class,TestDynamicLoading:

public classTestDynamicLoading {public static voidmain(String[] args) {newA();

System.out.println("*****-------------------------******");newB();newC();newC();newD();newD();

}

}classA{

}classB{

}classC{//static语句块,只调用一次。

static{

System.out.println("CCCCCCCCCCCCCCCCCCCCCCCCCCCC");

}

}classD{//动态语句块,每次new出来对象时被调用一次。用的不多。

{

System.out.println("DDDDDDDDDDDDDDDD");

}

}

右键,Run As-----> Run  Configurations。

Program arguments:程序命令行参数

VM arguments:虚拟机的参数,java程序运行的时候java命令行上给你指定的虚拟机参数

-verbose:class  :详细的输出。

---> Run

32e7bf9aa14d2947b1f81e7bb98b3a03.png

可以看到控制台的输出,程序的执行步骤是:

1,先加载  class  A,

2,再执行 System.out.println("*****-------------------------******");

3,加载 class  B,

4,加载 class  C,而且static语句块只执行了一次。

5,加载class  D ,动态语句块执行了2次。

java的动态加载机制就是如此,被验证。

[Loaded A from file:/D:/Eclipse/gongzuokongjian/Reflection/bin/]*****-------------------------******[Loaded B from file:/D:/Eclipse/gongzuokongjian/Reflection/bin/]

[Loaded C from file:/D:/Eclipse/gongzuokongjian/Reflection/bin/]

CCCCCCCCCCCCCCCCCCCCCCCCCCCC

[Loaded D from file:/D:/Eclipse/gongzuokongjian/Reflection/bin/]

DDDDDDDDDDDDDDDD

DDDDDDDDDDDDDDDD

欢迎关注个人公众号一起交流学习:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值