本文从以下方面介绍类加载器:
一、类与类加载器
二、双亲委派模型
一、类与类加载器
类加载器:通过一个类的全限定名来获取该类的二进制字节流,该动作在虚拟机的外部执行,方便让应用程序自己决定获取所需要的类。实现该动作的代码模块成为“类加载器”。
1、类与类加载器
① 类加载过程中的“加载”阶段需要用到类加载器;
②对于任意一个类而言,都需要由加载该类的类加载器以及类本身来唯一确定其在虚拟机中的唯一性;
③通俗而言:两个类是否相等,是由类加载器以及class文件共同决定的;
④此处“相等”指的是:Class对象的equals(),isInstance(),isAssignableFrom()方法的返回结果,同样也包括instanceof关系做对象所属关系的判定;
二、双亲委派模型
1、Java虚拟机的角度
有两种不同的类加载器:
①启动类加载器(Bootstrap ClassLoader):c++语言实现,为虚拟机自身的一部分;
②其他类加载器:java语言实现,独立于虚拟机之外,全部继承自抽象类java.lang.ClassLoader
2、开发人员的角度
有三类类加载器:
①启动类加载器(Bootstrap ClassLoader):加载<JAVA_HOME>\lib目录中,或-Xbootclasspath参数所指定的路径中,并且为虚拟机所识别的类库加载到虚拟机的内存中;
②扩展类加载器(Extension ClassLoader):加载<JAVA_HOME>\lib\ext目录中,或者是java.ext.dirs系统变量所指定的路径中的所有类库;
③应用程序类加载器(Application ClassLoader):该类加载器是由ClassLoader中的getSystemClassLoader来实现,因此也别成为系统的类加载器。加载用户路径下(classpath)上所指定的类库,用户可以直接使用,应用程序中没有自定义过类加载器,则该加载器为默认类加载器。
3、类加载器双亲委派模型
(1)图中所展示的类加载器之间的层次关系,称为类加载器的双亲委派模型(Parent Delegation Model);
(2)双亲委派模型中,启动类加载器没有父类加载器外,其他类加载器都有父类加载器,而子父类之间的关系不是通过继承实现的,而是通过组合关系来复用父类加载器的代码;
(3)双亲委派模型工作过程:当加载一个类时,子类加载器先将加载工作委派给父类加载器,每一层次的类加载器都是如此,加载的请求到了顶层启动类加载器仍无法完成加载工作,则子类的加载器才会尝试加载工作;
(4)使用双亲委派模型加载类,显而易见的好处是,java类随着他的类加载器也有了优先级的层次关系。如:java.lang.Object,无论什么环境下都是有启动类加载器加载,因此,在程序中各种类加载器环境下该类都是同一个类
相关推荐
类加载器的设计遵循双亲委派模型,它分为三个主要部分:启动类加载器、扩展类加载器和应用类加载器。 #### 二、类加载过程 类加载过程主要包括三个步骤: 1. **加载**:通过类的全限定名找到该类的二进制字节流。...
### 类加载器详解 #### 一、类加载器概述 **类加载器(ClassLoader)**是Java虚拟机(JVM)中的一个重要组成部分,它负责将编译好的`.class`文件加载到JVM中,使得这些类可以在Java环境中运行。类加载器不仅能够加载类...
- Java中的类加载器采用双亲委派模型,即一个类首先由启动类加载器Bootstrap ClassLoader尝试加载,如果找不到则交给扩展类加载器Extension ClassLoader,再找不到则交由应用程序类加载器AppClassLoader,最后如果...
在Java编程语言中,类加载器(ClassLoader)是运行时环境的一个重要组成部分,它负责将类的字节码从各种来源加载到Java虚拟机(JVM)中,从而使得程序可以执行。自定义类加载器允许开发人员根据特定需求定制加载类的...
类加载器遵循双亲委派模型,这意味着当一个类加载器尝试加载类时,它首先会将请求委托给其父类加载器,直到到达顶层的Bootstrap ClassLoader,如果父类加载器无法找到该类,子类加载器才会尝试自己加载。 在Tomcat...
Java 类加载器原理 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定...
1. Bootstrap ClassLoader:这是最基础的类加载器,由JVM本身实现,负责加载JRE的`<JAVA_HOME>/lib`目录下的核心类库,或者被`-Xbootclasspath`参数指定的路径中的类。 2. Extension ClassLoader:扩展类加载器,...
类加载器的知识不仅仅局限于基础概念,还包括类加载的时机(静态加载、动态加载)、类加载器的实现(如自定义类加载器)、类的卸载、以及类加载器与安全策略的关系等。深入理解和掌握这些知识点,对于开发高效、安全...
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
系统类加载器在加载类时,会先尝试让扩展类加载器加载,如果扩展类加载器无法加载,则再由系统类加载器自己尝试加载。这样的设计是为了保证核心类库的唯一性和安全性,避免用户自定义的类覆盖了 JDK 内置的核心类。 ...
Java开发中的类加载器是Java运行环境的核心组件之一,它负责查找、加载和初始化类文件。在传统的Java应用中,类通常是从硬盘上的类路径(ClassPath)或模块路径(ModulePath)中加载的。然而,随着开发模式的演变,...
Java类加载器是Java虚拟机(JVM)的关键组成部分,它负责查找并加载类到内存中,使得程序能够运行。自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java...
Java 类加载器是Java运行时环境的一个重要组成部分,它的主要职责是将编译后的字节码(.class文件)加载到JVM中,使得程序能够运行。类加载器的机制保证了类的唯一性,同时也提供了灵活性,允许我们自定义加载逻辑。...
在Java中,类加载器按照层次结构进行组织,包括引导类加载器、扩展类加载器和应用程序类加载器,每个都有特定的职责。 1. **引导类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,由JVM本身实现,主要...
Java的类加载器是Java虚拟机(JVM)的核心组件之一,它负责将类的字节码从磁盘、网络或其他数据源加载到内存中,并转换为可执行的Java对象。类加载器不仅关乎程序的运行,还在实现动态加载、插件系统等方面发挥着...
在Java编程中,静态代码块(Static Block)和类加载器(Class Loader)是两个重要的概念,它们在软件开发中有着广泛的应用。本案例聚焦于如何利用静态代码块结合类加载器来高效地获取资源文件,尤其是属性配置文件。...
默认的类加载器包括bootstrap classloader(引导类加载器)、extension classloader(扩展类加载器)和appclassloader(应用程序类加载器),它们按照双亲委托模型进行工作,从基础到具体逐层尝试加载类。...
在Java编程语言中,类加载器(ClassLoader)是至关重要的组成部分,它负责将类的字节码从磁盘、网络或其他存储介质加载到JVM(Java虚拟机)中,并将其转换为可执行的Java对象。类加载器的学习是深入理解Java运行机制...
类加载器是Java虚拟机(JVM)的重要组成部分,它负责将类的字节码从文件系统或网络中加载到JVM中,并转换为运行时的java.lang.Class对象。类加载器不仅涉及程序的启动,还关系到类的动态加载、类间的隔离以及安全性...