【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 中国大陆”许可协议授权。


分享到:

目录
相关文章
|
1天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
13 6
|
3天前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
|
2天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
10 2
|
3天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。
【10月更文挑战第14天】从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。本文深入探讨Set的核心理念,并通过示例代码展示了HashSet和TreeSet的特点和应用场景。
8 2
|
3天前
|
存储 Java 索引
Java 中集合框架的常见接口和类
【10月更文挑战第13天】这些只是集合框架中的一部分常见接口和类,还有其他一些如 Queue、Deque 等接口以及相关的实现类。理解和掌握这些集合的特点和用法对于高效编程非常重要。
|
8天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
21 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
10天前
|
存储 安全 Java
Java零基础-Java类详解
【10月更文挑战第2天】Java零基础教学篇,手把手实践教学!
13 2
|
13天前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
19 5
|
13天前
|
Java 编译器 C语言
【一步一步了解Java系列】:类与对象的联系
【一步一步了解Java系列】:类与对象的联系
16 4
|
13天前
|
存储 Java 编译器
【一步一步了解Java系列】:认识异常类
【一步一步了解Java系列】:认识异常类
19 2