码迷,mamicode.com
首页 > 编程语言 > 详细

java动态加载机制

时间:2015-10-01 21:47:59      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:

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

 

技术分享技术分享

测试动态加载机制:

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

public class TestDynamicLoading {
    public static void main(String[] args) {
        
        new A();
        
        System.out.println("*****-------------------------******");
        
        new B();
        
        new C();
        new C();
        
        new D();
        new D();
        
    }

}
class A{
    
}

class B{
    
}
class C{
    //static语句块,只调用一次。
    static{
        System.out.println("CCCCCCCCCCCCCCCCCCCCCCCCCCCC");
    }
    
}
class D{
    //动态语句块,每次new出来对象时被调用一次。用的不多。
    {
        System.out.println("DDDDDDDDDDDDDDDD");
    }
}

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

Program arguments:程序命令行参数

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

-verbose:class  :详细的输出。

---> Run

技术分享

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

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

 

java动态加载机制

标签:

原文地址:http://www.cnblogs.com/lihaoyang/p/4851539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!