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

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

黄舟
Lepaskan: 2017-03-15 13:11:55
asal
2209 orang telah melayarinya

纸上得来终觉浅,绝知此事要躬行  --陆游       问渠那得清如许,为有源头活水来  --朱熹


一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(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();       
         }
    }
}
Salin selepas log masuk

一、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

Atas ialah kandungan terperinci Java类加载机制ClassLoder的详解(图文). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan