• 技术文章 >Java >java教程

    Java类加载机制ClassLoder的详解(图文)

    黄舟黄舟2017-03-15 13:11:55原创850
    纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹


    一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading)、验证(Verification)、准备(Preparetation)、解析(Resolution)、

    初始化(Initialization)、使用(Using)、卸载(Uploading)七个阶段。其中验证’准备和解析称为链接。





    一、ClassLoader类加载的架构

    1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。

    2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包

    3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;

    4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class


    二、类加载的特性

    1)、每一个ClassLoader都会维护一个自己的命名空间,同一个命名空间不能出现两个相同的类名

    2)、为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。

    三、类的加载方式有三种:

    1)、命令行启动应用时由JVM初始化加载。

    2)、通过class.forName()方法动态加载。

    3)、通过ClassLoader().loadClass()方法动态加载。

    这三种加载方式对静态代码块的执行有影响。

    如下例子:

    public class MyHello {    static    {
            System.out.println("hello word");    }
    }public class Hello {    public static void main(String[] args) {
            ClassLoader loader=Hello.class.getClassLoader();        
            try {            
            //静态代码块不运行            
            //loader.loadClass("Test.MyHello");            
            //静态代码块运行输出hello world            
            //Class.forName("Test.MyHello");            
            //静态代码块不运行            
            //Class.forName("Test.MyHello", false, loader);            
            //静态代码块运行输出hello world            
            Class.forName("Test.MyHello", true, loader);        
            } 
            catch (ClassNotFoundException e) {            
            // TODO 自动生成的 catch 块            
            e.printStackTrace();       
             }
        }
    }

    一、ClassLoader类加载的架构

    1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。

    2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包

    3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;

    4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class

    以上就是Java类加载机制ClassLoder的详解(图文)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java四种引用类型的具体介绍 下一篇:Java序列化Serializable和Externalizable区别的示例代码
    PHP编程就业班

    相关文章推荐

    • Java学习总结之数组(整理分享)• Java工厂方法模式详解• 详细整理java枚举的使用总结• 带你完全掌握Java NIO(总结分享)• 一起聊聊Java常用数据类型的输入输出

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网