• java动态加载机制


    假设有一个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
  • 相关阅读:
    调试
    node笔记汇总
    移动端布局
    css 易错点总结
    Angular笔记
    CANVAS笔记
    http笔记汇总
    各种环境搭建 软件安装等等 参考网址收录
    js中同步异步,任务队列
    node.js之fs模块
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4851539.html
Copyright © 2020-2023  润新知