博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java类加载器的父亲委托机制详细介绍
阅读量:7066 次
发布时间:2019-06-28

本文共 1233 字,大约阅读时间需要 4 分钟。

  hot3.png

讲解一下ClassLoader这个类

 

java.lang.ClassLoader

类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。

 

ClassLoader 类使用委托模型来搜索类和资源。每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。虚拟机的内置类加载器(称为 "bootstrap class loader")本身没有父类加载器,但是可以将它用作 ClassLoader 实例的父类加载器。

ClassLoader 有二个构造方法:

//这个构造方法 返回  返回的类加载器,就是系统类加载器。

 

protected ClassLoader()

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

如果存在安全管理器,则调用其  方法。这可能导致安全性异常。

 

//这个带参数的构造方法,可以指定当前类的父加载器

protected ClassLoader( parent)

使用指定的、用于委托操作的父类加载器创建新的类加载器。

如果存在安全管理器,则调用其  方法。这可能导致安全性异常。

参数:

parent - 父类加载器

 

public 
loadClass( name) throws

使用指定的来加载类。此方法使用与  方法相同的方式搜索类。Java 虚拟机调用它来分析类引用。调用此方法等效于调用 。

 

 

参数:

name - 类的

返回:

得到的 Class 对象 

protected 
findClass( name) throws

使用指定的查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被  方法调用。默认实现抛出一个ClassNotFoundException。

 

 

参数:

name - 类的

返回:

得到的 Class 对象

 

中的类加载器主要是父亲委托机制,其中的父亲委托机制并不是继承,而是聚集。下一篇文档会解析一下ClassLoader的源码

在父亲委托机制中,各个加载器按照父子关系形成了树的结构,除了跟类加载器以为,其余的类加载器有且只有一个父加载器。

下图是一个类加载器的树形图结构,表示父亲委托机制之间的关系:

以下是一个根据上图的一个类加载过程的实例讲解:

以下图片介绍定义类加载器和初始类加载器:

类加载之间的真正的关系:

为什么要使用父亲委托机制???

命名空间:

转载于:https://my.oschina.net/mifans/blog/860606

你可能感兴趣的文章
Play Framework 模板里使用注入访问数据层
查看>>
今天打开阿里妈妈惊现 ¥50 元佣金
查看>>
Oracle 正确删除archivelog文件
查看>>
Tigase XMPP Server源码部署
查看>>
Intellij IDEA创建Maven Web项目
查看>>
java 7 入门书籍
查看>>
Android Pdf文档的生成、显示与打印
查看>>
SpringMVC三种异常处理方式
查看>>
w命令
查看>>
golang使用oracle碰到go/lib/time/zoneinfo.zip: no such file or directory
查看>>
quartz定时任务时间设置描
查看>>
ES6常用语法
查看>>
https://www.jianshu.com/p/dbffae16ba0b
查看>>
微信,QQ这类IM app怎么做——谈谈Websocket
查看>>
在Ubuntu 11.04中安装Openresty
查看>>
JAVA常见的面试题
查看>>
《Python高效开发实战》实战演练——建立应用2
查看>>
java: -source 1.6 中不支持 switch 中存在字符串.....
查看>>
Confluence 6 空间
查看>>
lua-resty-http上传数据
查看>>