类加载器,类加载
类加载器,类加载
类加载器
类加载器(class loader)用来加载Java类到
Java 虚拟机中。一般来说,Java虚拟机使用Java
类的方式如下:Java源程序(.java文件)在经过Java
编译器编译之后就被转换成 Java
字节代码(.class
文件)。类加载器负责读取 Java
字节代码,并转换成java.lang.Class
类的一个实例。每个这样的实例用来表示一个 Java类。通过此实例的newInstance()
方法就可以创建出该类的一个对象。
Java中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java应用开发人员编写的。系统提供的类加载器主要有下面三个:
1、引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。
2、扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java类。
3、系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java类。一般来说,Java应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。
除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊的需求。
类加载器中的委托机制
l 当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?
Ø 首先当前线程的类加载器去加载线程中的第一个类。
Ø 如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
Ø 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
l 每个类加载器加载类时,又先委托给其上级类加载器。
Ø 当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛ClassNotFoundException,不是再去找发起者类加载器的儿子,因为没有getChild方法,即使有,那有多个儿子,找哪一个呢?
Ø 对着类加载器的层次结构图和委托加载原理,解释先前将ClassLoaderTest输出成jre/lib/ext目录下的itcast.jar包中后,运行结果为ExtClassLoader的原因。
中类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java类的字节代码到 Java虚拟机中类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java类的字节代码到 Java虚拟机中。类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java类的字节代码到 Java虚拟机中。
相关文章
- 暂无相关文章
用户点评