ClassLoader常见方法汇总
来源:互联网 发布:网络捕鱼游戏平台大全 编辑:程序博客网 时间:2024/06/06 18:52
ClassLoad是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。
每个 Class
对象都包含一个对定义它的ClassLoader 的引用
。
数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader()
返回,该加载器与其元素类型的类加载器是相同的;如果该元素类型是基本类型,则该数组类没有类加载器。
应用程序需要实现 ClassLoader 的子类,以扩展 Java 虚拟机动态加载类的方式。
类加载器通常由安全管理器使用,用于指示安全域。
ClassLoader 类使用委托模型来搜索类和资源。每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。虚拟机的内置类加载器(称为 "bootstrap class loader")本身没有父类加载器,但是可以将它用作ClassLoader 实例的父类加载器。
通常情况下,Java 虚拟机以与平台有关的方式,从本地文件系统中加载类。例如,在 UNIX 系统中,虚拟机从 CLASSPATH 环境变量定义的目录中加载类。
然而,有些类可能并非源自一个文件;它们可能源自其他来源(如网络),也可能是由应用程序构造的。defineClass
方法将一个 byte 数组转换为Class 类的实例。这种新定义的类的实例可以使用 Class.newInstance
来创建。
类加载器所创建对象的方法和构造方法可以引用其他类。为了确定引用的类,Java 虚拟机将调用最初创建该类的类加载器的 loadClass
方法。
常见的方法有:
1)loadClass方法
protected Class<?> loadClass(String name,boolean reslove) throws ClassNotFoundException;
- 使用指定的二进制名称来加载类。此方法的默认实现将按以下顺序搜索类:
调用
findLoadedClass(String)
来检查是否已经加载类。在父类加载器上调用
loadClass
方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。调用
findClass(String)
方法查找类。
如果使用上述步骤找到类,并且 resolve 标志为真,则此方法将在得到的 Class 对象上调用
resolveClass(Class)
方法。鼓励用 ClassLoader 的子类重写
findClass(String)
,而不是使用此方法。 - 参数:
name
- 类的二进制名称resolve
- 如果该参数为 true,则分析这个类- 返回:
- 得到的 Class 对象
- 抛出:
ClassNotFoundException
- 如果无法找到类
2)findClass方法
protected Class<?> findClass(String name) throws ClassNotFoundException
- 使用指定的二进制名称查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被
loadClass
方法调用。默认实现抛出一个 ClassNotFoundException。 - 参数:
name
- 类的二进制名称- 返回:
- 得到的 Class 对象
- 抛出:
ClassNotFoundException
- 如果无法找到类
@Deprecatedprotected final Class<?> defineClass(byte[] b, int off, int len) throws ClassFormatError
- 已过时。 由
defineClass(String, byte[], int, int)
取代 - 将一个 byte 数组转换为 Class 类的实例。必须分析 Class,然后才能使用它。此方法已废弃,新版本将二进制名称作为该类的第一个参数,后者更加安全。
- 参数:
b
- 组成类数据的字节。off 与 off+len-1 之间的字节应该具有《Java Virtual Machine Specification》定义的有效类文件的格式。off
- 类数据的 b 中的起始偏移量len
- 类数据的长度- 返回:
- 从指定类数据创建的 Class 对象
- 抛出:
ClassFormatError
- 如果数据不包含有效类IndexOutOfBoundsException
- 如果off 或 len 为负,或者 off+len 大于 b.length。
- ClassLoader常见方法汇总
- 常见数据分析方法汇总
- 常见宽带路由器设置方法汇总
- 图像处理之常见二值化方法汇总
- 图像处理之常见二值化方法汇总
- UIView中常见的方法汇总
- 图像处理之常见二值化方法汇总
- shell常见任务的处理方法汇总
- java常见事件响应方法实例汇总
- sat阅读常见的修辞方法汇总
- 图像处理------常见二值化方法汇总
- SPSS常见数据分析方法比较汇总
- 图像处理之常见二值化方法汇总
- 获取默认ClassLoader方法
- 固件升级的设计-常见的升级方法汇总
- 【编程语言】java--String类常见方法汇总
- Lucene的常用对象与常见属性、方法汇总
- eclipse中Android模拟器常见的问题解决方法汇总
- Eclipse中使用kindeditor插件
- 类型转换
- 什么是JPS
- Derek Bradley & Gerhard Roth自适应二值化算法, Opencv实现
- github入门教程
- ClassLoader常见方法汇总
- 算法之memmove的实现
- nyoj 1166 士兵杀敌(二) 【二叉树&&线段树组】
- 杭电2079
- android 隐藏显示动画
- 信号量在Java线程中的应用
- 安卓奇葩问题之Attribute tabTextColor has already been defined
- web.xml标签详解
- 使用递归算法结合数据库解析成java树形结构