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

Java-类加载器

时间:2015-03-03 21:59:31      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

1.类加载器

  •    类加载器是当程序运行时要使用某个类,则类加载器就加该类的字节码加载到内存里执行。
  •    Java虚拟机可以安装多个类加载器,系统默认三个主要的类加载器,每个类加载器负责加载不同位置的类
  •        Bootstrap,ExtClassLoader,AppClassLoader。
  •    有的类加载器也是Java类,所以必须有一个非Java类的加载器加载其他Java类的类加载器,这个就是Boostrap
  •    Java虚拟机中的所有类加载器采用具有父子关系的树形结构进行组织。每个实例化类加载器对象时必须为其指定
  •        一个父级的类加载器对象,或采用系统默认的类加载器作为父级。

2.ClassLoader

   构造方法:

        ClassLoader();//使用方法 getSystemClassLoader() 返回的 ClassLoader 创建一个新的类加载器,将该加载器作为父类加载器。

        ClassLoader(ClassLoader parent);//指定父类加载器,父类可能最终调用Bootstrap作为最后的父级。

   成员方法:

        ClassLoader  getParent();//返回委托的父类加载器。

        static  ClassLoader  getSystemClassLoader();//返回系统的类加载器

        Class<?> loadClass(String name);//使用指定的二进制名称来加载类。

3.三大类加载器的关系及加载类的范围

 

   BootStrap:常用的Java类,如System,util下的集合类等等。

   ExtClassLoader:我们可以通过export,将我们自定义的类导出到该类加载器的文件夹下,

4.类加载器的委托机制

   类加载器加载类的时候,会委托父级加载器去找该类并加载该类,父类又委托给父类,直到祖宗加载该类

   祖宗没加载到该类的话,会让下一级找,直到最初委托的加载器。还不行的话就会报异常ClassNotFoundException

  • 首先当前线程的类加载器(getContextClassLoader())去加载线程中的第一个类。
  • 如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
  • 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。

 

Java-类加载器

标签:

原文地址:http://www.cnblogs.com/beyondbycyx/p/4311891.html

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