作者:由来只有新人笑_谁能记得旧人哭 | 来源:互联网 | 2023-09-15 18:22
前面博客中简单提到类加载器,并有demo展示。在这里详细介绍一下。http:blog.csdn.netqwlzxxarticledetails71404166类加载器用来把类加载到Java
前面博客中简单提到类加载器,并有demo展示。在这里详细介绍一下。
http://blog.csdn.net/qwlzxx/article/details/71404166
类加载器用来把类加载到Java虚拟机中。
类加载器之间的关系:
Java虚拟机自带的类加载器
根(Bootstrap)类加载器:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。之前博客中提到Test1.java的例子,返回null(http://blog.csdn.net/qwlzxx/article/details/71404166)说明了这一点。根类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。根类加载器的实现依赖于底层操作系统,属于虚拟机的实现的一部分,它并没有继承java.lang.ClassLoader类。
扩展(Extension)类加载器:它的父加载器为根类加载器。它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jre\lib\ext子目录(扩展目录)下加载类库,如果把用户创建的JAR文件放在这个目录下,也会自动由扩展类加载器加载。扩展类加载器是纯Java类,是java.lang.ClassLoader类的子类。
系统(System)类加载器:也称为应用类加载器,它的父加载器为扩展类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。系统类加载器是纯Java类,是java.lang.ClassLoader类的子类。
用户自定义的类加载器
用户可以定制自己的类加载器(User-defined Class Loader)。Java提供了抽象类java.lang.ClassLoader, 所有用户自定义的类加载器应该继承ClassLoader类。