【Java学习笔记】类的加载器

简介: 作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.作用: 用来把类加载到JVM虚拟机。 2.加载过程特征: 当请求加载器loader1加载Sample类时,loader1首先委托自己的父加载器去加载Sample类,若父加载器不能加载则loader1本身去加载。

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

1.作用:

用来把类加载到JVM虚拟机。

2.加载过程特征:

当请求加载器loader1加载Sample类时,loader1首先委托自己的父加载器去加载Sample类,若父加载器不能加载则loader1本身去加载。这样可以保证Java平台的安全。

3.种类:

a)根(Bootstrap)加载器:该加载器没有父加载器,负责加载虚拟机的核心类库。其实现依赖于底层的操作系统,属于虚拟机实现的一部分。

b)扩展(Extension)类加载器:其父加载器为根类加载器,负责从java.ext.dirs系统属性所指定的目录中加载类,或者从JDK安装目录的jre/liv/ext子目录下加载类库。其是纯Java类,是java.lang.Classloader的子类。

c)系统(System)类加载器:也称为应用类加载器,它的父加载器为扩展类加载器,负责从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义类的默认父加载器。其是纯Java类,是java.lang.Classloader的子类。

4.具体加载过程: Class sampleClass = loader2.loadClass(“sample”);

loader2首先从自己的命名空间中查找Sample类是否已经被加载,若已经加载,就直接返回代表Sample类的Class对象的引用。若没有加载,loader2会一步步向上请求各级父加载器加载直到顶端,然后层层返回加载是否成功的讯息,若没有一处成功的,则抛出ClassNotFound异常。若有一个类加载器能成功加载,那么称其为定义类加载器,所有能成功返回Class对象的引用的类加载器(包含定义类加载器)都称为初始类加载器。

注意:加载器之间的父子关系不是指继承,而是加载器对象之间的包装关系。一对父子类加载器可能是同一加载类的两个实例,例如:

ClassLoader loader1 = new MyClassLoader();

ClassLoader loader2 = new MyClassLoader(loader1);//参数loader1作为loader2的父加载器

5.命名空间的定义:

每个类的加载器都有自己的命名空间,其是由该加载器及所有父类加载器所加载的类组成。

6.运行时包:

由同一类加载器加载的属于相同包的类组成了运行的包,决定两个类是不是属于同一运行时包,不仅看其包名是否相同,还要看定义类加载器是否相同。

7.创建自定义的类加载器

通过扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字,返回对应的Class对象的引用。具体的可以参考http://blog.csdn.net/assre/archive/2006/01/18/583398.aspx

 

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/


               作者:gnuhpc
               出处:http://www.cnblogs.com/gnuhpc/
               除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


分享到:

目录
相关文章
|
4天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
155 101
|
4天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
155 100
|
8天前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
9天前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
1月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
1月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
1月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
286 120
|
2月前
|
Java API
深入解析Java API中Object类的功能
了解和合理运用 Object类的这些方法,对于编写可靠和高效的Java应用程序至关重要。它们构成了Java对象行为的基础,影响着对象的创建、识别、表达和并发控制。
63 0
|
2月前
|
安全 Java
JAVA:Collections类的shuffle()方法
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的工具方法,适用于洗牌、抽奖等场景。该方法直接修改原列表,支持自定义随机数生成器以实现可重现的打乱顺序。使用时需注意其原地修改特性及非线程安全性。
123 0