java ClassLoader 基本原理

java ClassLoader 基本原理

ID:42577745

大小:111.88 KB

页数:21页

时间:2019-09-18

java ClassLoader 基本原理_第1页
java ClassLoader 基本原理_第2页
java ClassLoader 基本原理_第3页
java ClassLoader 基本原理_第4页
java ClassLoader 基本原理_第5页
资源描述:

《java ClassLoader 基本原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Ⅰ.类加载器基本概念顾名思义,类加载器(ClassLoader )用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:·Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。·类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java类。通过此实例的newInstance()方法就可以创建出该类的一个对象。实际的情况可能更加复杂,比如:Java字节代码可能是通过工具动态生成的,也可能是通过网

2、络下载的。Ⅱ.Classloader类图注意:这是类关系,非对象关系。基本上所有的类加载器都是java.lang.ClassLoader类的一个实例。BootstrapClassLoader是一个单独的java类,其实在这里,不应该叫他是一个java类,因为,它已经完全不用java实现了。java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java类,即java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载Java应用所

3、需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。为了完成加载类的这个职责,ClassLoader提供了一系列的方法,比较重要的方法如:getParent()返回该类加载器的父类加载器。loadClass(Stringname)加载名称为name的类。是加载器加载类的主要方法,也是实现双亲委派模型的主要方法(稍后会详细讲解)。返回的结果是java.lang.Class类的实例。findClass(Stringname)在自己的查找路径中,查找名称为name的类,并调用defineClass方法,加载该类。返回的结果是java.

4、lang.Class类的实例。findLoadedClass(Stringname)在自己的类加载器中,查找名称为name的已经被自己加载过的类。返回的结果是java.lang.Class类的实例。defineClass(Stringname,byte[]b,intoff,intlen)把字节数组b中的内容转换成Java类,返回的结果是java.lang.Class类的实例。这个方法被声明为final的。按照《JavaLanguageSpecification》的定义,任何作为String类型参数传递给ClassLoader中方法的类名称都

5、必须是一个二进制名称(上述方法中的"Stringname")。有效类名称的示例包括:"java.lang.String""javax.swing.JSpinner$DefaultEditor""java.security.KeyStore$Builder$FileBuilder$1""java.net.URLClassLoader$3$1"需要注意的是内部类的Stringname表示,如com.example.Sample$1和com.example.Sample$Inner等表示方式。URLClassLoader是ClassLoader的

6、子类,是系统类加载器(appCLassLoader)和扩展类加载器(extClassLoader)的父类(类图关系,非对象关系)。URLClassLoader非常强大,可以从本地文件系统获取二进制文件来加载类,也可以从远程主机获取二进制文件来加载类。实际上,在应用程序中,可以直接使用URLClassLoader来加载类,URLClassLoader提供了如下两个构造器:·URLClassLoader(URL[]urls):使用默认的父类加载器创建一个ClassLoader对象,该对象将从urls指定的系列路径来查询并加载类。·URLClas

7、sLoader(URL[]urls,ClassLoaderparent):使用指定的父类加载器创建一个ClassLoader对象,其他功能与前一个构造器相同。Ⅲ.Classloader对象关系图Java中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java应用开发人员编写的。通常,会对类加载器对象指定一个或多个“目录或文件”,使类加载器只加载这些指定"目录或文件"下的.class文件。系统提供的类加载器主要有下面三个:    1).引导类加载器(bootstrapClassLoader):       它用来加载 Java的

8、核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。      例如:Java的核心库一般是JRE目录下的“librt.jar”等等。     

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。