zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C++11常用特性的使用经验总结
    Websocket协议的学习、调研和实现
    高性能后台服务器架构设计
    Linux下ping命令、traceroute命令、tracert命令的使用
    docker-4-Dockerfile配置文件详解
    Docker 国内仓库和镜像
    centos7.0查看IP
    tomcat报错:This is very likely to create a memory leak问题解决
    windows 环境下搭建docker私有仓库
    Docker 修改镜像源地址
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4851539.html
Copyright © 2011-2022 走看看