JAVA反射机制深入学习(三)ClassLoader类装载器介绍

手把手教你搭建基于Springboot+Vue的酒店管理系统 友友们,又是好久没更新了,马上元旦了,要迈入2025蛇年了,提前祝大家蛇年快乐,学有所成,本文博主将带领大家使用Springboot和Vue搭建一个酒店管理系统,受限于本文篇幅内容,本文罗列仅有部分简单示例内容,主要包括前后端示例源码。通过本文,你将大致掌握如何快速搭建一个现代化的Web应用。如果您想学习完整开发方案,包括项目源码+数据库文件+全套环境资源+代码部署视频教程+开发文档】获取学习资源,支持远程安装调试:一、项目背景随着互联网技术的不断发展,酒店行业对信息化的需求越来越高。 阅读详情
接下来介绍下JAVA中非常重要的一个类ClassLoader(类装载器)

类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件。主要工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。
在JAVA中java虚拟机把一个类装入到java虚拟机当中需要经过以下的步骤:
1.装载:查找和导入Class文件
2.链接:执行校验,准备和解析步骤。
其中校验主要是检查载入class文件数据的正确性,而准备工作就是给类的静态变量来分配存储空间,解析则是将符号引用来转变成直接引用。
3.初始化:对类的静态变量、静态代码块执行初始化工作
类文件被装载并解析之后,在java虚拟机内将拥有一个对应的java.lang.class类描述对象。该类的对象实例则拥有指向这个类描述对象的引用。而类描述对象又拥有指向关联ClassLoader的引用。
每一个类在java虚拟机当中都拥有一个对应的java.lang.class文件。他提供了类结构信息的描述,数组、枚举、注解以及基本的java类型,甚至void都拥有对应的class属性。Class没有public的构造方法,class是在装载类时由java虚拟机调用类装载器中的defineClass方法来自动构造的。
JVM装载类时使用全盘负责委托机制
全盘负责:当一个ClassLoader装载一个类的时候,除非显式的使用另一个ClassLoader,否则该类所依赖即引用的类也由这个ClassLoader来载入。
委托机制:先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。这一点是从安全角度来考虑的。
JVM在运行时会产生三个字节码文件:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。
根装载器:不是ClassLoader的子类,由于他是使用C++来编写的,因此在JAVA中看不到他。根装载器来复制装载jre的核心类库,如jre目标下的rt.jar、charsets.jar等。
ExtClassLoader:是ClassLoader的子类,负责装载jre扩展目录ext中的jar类包
AppClassLoader:是ClassLoader的子类,负责装载classpath路径下的类
这三个装载器之间存在着父子层级的关系:
根装载器是ExtClassLoader的父装载器,而ExtClassLoader是AppClassLoader的父装载器。
在默认情况下使用AppClassLoader装载应用程序的类。
接下来我们在程序中来验证一下
public class ClassLoaderTest {

  public static void main(String[] args) {
      ClassLoader loader = Thread.currentThread().getContextClassLoader();
      System.out.println("current loader:"+loader);//打印当前类装载器的信息
      System.out.println("parent loader:"+loader.getParent());//打印当前类装载器的父类
      System.out.println("grandparent loader:"+loader.getParent().getParent());//打印当前类装载器的祖父
      //注意:根装载器在JAVA中访问不到
  }
}
可以看到打印的结果
current loader:sun.misc.Launcher$AppClassLoader@4b67cf4d
parent loader:sun.misc.Launcher$ExtClassLoader@60e53b93
grandparent loader:null

在JAVA中ClassLoader是一个抽象类,主要位于java.lang包中。接下来主要介绍一下该类主要的接口方法。
1.    Class loadClass(String name)
其中name参数是指定类装载器需要装载类的名字,且必须使用全限定类名。
在初始化类之前,应考虑进行类解析的工作,但并不是所有的类都需要解析。
如果java虚拟机只需要知道该类是否存在或者找该该类的超类那么就不需要进行解析。
2.    Class defineClass(String name, byte[]b, int off,int len)
这个方法是将类文件的字节数组来转换为java虚拟机内部的java.lang.class对象。字节数组可已从本地文件系统,远程网站中进行获取。而name为字节数组对应的全限定名。
3.    Class findSystemClass(String name)
从本地文件系统来载入class文件,如果本地文件系统不存在该class文件,那么他将会抛出ClassNotFoundException这个异常。这个方法是java虚拟机默认使用的机制。
4.    Class findLoadedClass(String name)
调用该方法来查看classloader是否以装入到某个类当中,如果已经装入则返回java.lang.class对象,否则返回null。
如果强行装载已经存在的类,那么将会抛出链接错误。
5.    ClassLoader getParent()
获取类装载器的父装载器。除根装载器之外,所有的类装载器都有且仅有一个父装载器。ExtClassLoader的父装载器是根装载器,因为根装载器非java编写,所以返回null。
除了java虚拟机默认的三个装载器之外,还允许自定义装载器用来实现一些特殊的需求。


(一)Tushare Pro教程:股票基本数据接口  一直使用tushare作数据源,这里开个教程大家一起学习。 一、介绍        tushare是一个python股票数据源,现已升级到tushare pro版本,新版本在数据稳定性和获取速率上大幅提升。与wind、东财等收费数据源相比,tushare pro算是金融数据界的良心之作,其为从事金融工程、量化研究等方向的同学们提供了便利。tushare pro还有一点突出的特色就是已经将股票... 阅读详情

相关推荐

在Ansys Mechanical中对磨损进行建模

在有限元分析中,磨损是通过移动接触表面上的节点来复制材料侵蚀来建模的。仿真迭代更新几何,并在每次更新后重新计算平衡,使过程成为非线性的。Ansys使用将压力、相对运动和材料阻力与表面损失联系起来的经验定律来处理连续介质尺度的磨损。要在Ansys Mechanical中激活磨损建模,必须使用TB,WEAR命令定义专用材料模型。该命令与 TBDATA 相结合,允许用户输入与磨损相关的材料常数,以控制磨损的计算方式以及在接触表面上的应用方式。

jkh920184196的博客 2623

Thread.currentThread().getContextClassLoader()

Thread线程API中,getContextClassLoader()方法的描述为: * Returns the context ClassLoader for this Thread. The context * ClassLoader is provided by the creator of the thread for use * by code running in this t...

SJZYLC的专栏 1万+

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 366

Vue进阶(七十五):相对路径和绝对路径

绝对路径:是从盘符开始的路径,形如 C:\windows\system32\cmd.exe 所谓的绝对路径就是完整的路径。 相对路径:是从当前路径开始的路径,假如当前路径为C:\windows 要描述上述路径,只需输入 system32\cmd.exe 实际上,严格的相对路径写法应为 .\system32\cmd.exe 其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。 假...

IT全栈 华强工作室 9058

自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类。

十多年IT经验,专注机器视觉,智能制造半导体行业 5024

RAP 时代的 Service Binding:把 CDS 业务服务稳稳地“插”到 OData 里

本文深入解析SAP ABAP开发中的关键对象Service Binding,阐述了如何通过三层架构(数据模型、服务定义、服务绑定)实现业务逻辑与协议分离。文章重点分析了Service Binding的核心参数配置,包括服务命名规范、协议类型选择(OData V2/V4、InA、SQL)及服务形态(UI Service与Web API),并通过实际案例说明不同选项的应用场景。同时介绍了服务版本控制机制、发布流程及Fiori预览功能,帮助开发者理解如何通过Service Binding将业务能力高效转化为可消费

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5708

Thread.currentThread().getContextClassLoader().getResource(“pathName“).getPath()路径乱码问题

使用Java的反射机制时,这就需要使用Class.forName()方法。使用该方法需要读取properties文件,继而需要创建流,而创建流就需要获取文件读取地址。而使用上述方法创建地址时报错,分析错误发现,地址有问题,获取的地址中出现了乱码,继续测试,发现只要地址中出现中文或者特殊字符就会出现该问题。 String path=Thread.currentThread().getContextClassLoader().getResource("jdbc.properties").getPath();

weixin_37047553的博客 1301

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 763

ClassLoader,Thread.currentThread().setContextClassLoader,tomcat的ClassLoader

实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个  this.getClass.getClassLoader(); Thread.currentThread().getContextClassLoader(); 方法一得到的Classloader是静态的...

weixin_34400525的博客 464

四舵轮底盘运动学模型(源码)(四轮四独立转向)二

舵轮4转向活动范围 x 轴正半轴,x轴正方向为0弧度,左正右负, -M_PI/2 < 转向范围 < M_PI/2;移动底盘的正前方为x方向,左侧为y轴方向(遵循右手坐标系,右手大拇指指向天空为z轴方向,食指与中指垂直,食指指向小车正前方为x轴,中指指向为移动底盘y轴方向)转向:逆时针旋转角速度w为正,顺时针旋转角速度w为负。(遵循右手螺旋法则,右手握拳大拇指指向天空为旋转z轴方向,拳垂直于地面,4指方向即底盘转动的正方向)左前轮为1号轮,右前轮为2号轮,左后轮为3号轮,右后轮为4号轮。

苏凯的博客 526

半导体材料仿真:二维材料仿真_(1).二维材料的基本概念

在半导体材料仿真领域,二维材料因其独特的物理和化学性质而受到广泛关注。二维材料,也称为二维纳米材料,是指在二维空间(通常是平面)上具有原子级厚度的材料。这些材料的厚度通常在几个纳米甚至单个原子层的范围内,使得它们在电子、光学、热学和机械性能上表现出与传统三维材料显著不同的特性。本节将详细介绍二维材料的基本概念,包括它们的分类、结构、性质以及在半导体材料仿真中的应用。

2401_87715305的博客 1544

第八章 多线程

阻塞状态:执行sleep(毫秒),join(毫秒)方法进入阻塞,恢复后改为就绪->运行。注意:join写在哪个线程就阻塞谁,谁调用就强制执行谁。类,重写run方法,调用start方法启动。接口,重写run方法,创建Thread对象。就绪状态:调用start()方法。创建状态:new Thread。notify() 唤起一个线程。1.继承java.lang.2.实现java.lang.运行状态:执行run()方法。死亡状态:run()运行结束。,调用start方法启动。wait() 暂停一个线程。

Jay的小提琴的博客 549

DRV8711驱动器的各寄存器的介绍

drv8711驱动器

PCLintelligence的博客 1634

类装载器——ClassLoader

类装载器——ClassLoader Java反射机制

花满溪的博客 500

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java反射机制

小白看的懂的Java反射入门!!!

学习笔记,相关教程 分享 7396

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 反射机制 method_说说 Java 的反射机制

Java 语言允许通过程序化的方式间接对 Class 进行操作, Class 文件由类装载器装载后,在 JVM 中将形成一份描述 Class 结构的元信息对象,通过该元信息对象可以获知 Class 的结构信息:如构造函数 、 属性和方法等信息 。1 示例假设有这样一个类:publicclassPeople{/***姓名*/privateStringname;/***年龄*/p...

weixin_32980943的博客 229

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java类装载器研究

最近在公司做一个行李监控系统,主要使用了Spring。之前看过Spring方面的书,所以项目还算得心应手。但本人打算深入的研究Spring的原理,于是有了此文。 Spring能帮助开发者自动管理bean的创建和注入,这是多么神奇的事情。这也得益于Java的反射机制。在反射机制中,我研究了下类装载器的相关资料,现总结如下: ClassLoader是一个抽象类,它能在运行时查找并装入Class字节

高毅的博客 471

java学习笔记-反射(2)-ClassLoader

慢慢来比较快,虚心学技术  前言:在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。 同文链接:https://www.jianshu.com/p/63774338a87d   概念 ClassLoader:类的加载器,用来把...

Laiguanfu的博客 404

JAVA反射机制

开门见山,我们通过java反射机制以一种更加通用的方式间接的操作目标类。 目标类: 测试类: 输出: 在测试类中,我们使用了几个重要的反射类,分别是ClassLoader,Class,Constructor和Method,通过这些反射类就可以间接调用目标Class的各项功能了。 1.我们调用当前线程的ClassLoader,然后通过指定的全限定类“test.Car

Kameleon 1139

java 反映射详解_Java反射机制详解

Java反射机制详解Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。1、关于Class1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性2...

weixin_42325867的博客 587

Java语言的类反射功能

java语言的类反射机制学习一、 简单实例二、类装载器ClassLoader1.类装载器的工作机制全盘负责委托机制2.CalssLoader的重要方法三、Java 反射机制 Java语言允许通过程序化的方式间接对Class进行操作。Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构造函数、属性和方法等。Java允许...

weixin_38228386的博客 297

【JavaSE】Java的反射机制

6.ClassLoader 类装载器。1.2java反射机制提供的功能。5.哪些类型可以有Class对象。4.如何获得Class对象。2.动态语言和静态语言。6.2 加载的两种方式。6.3 类加载器的分类。1.java反射机制。

wosixiaokeai的博客 940

java反射机制

被视为动态语言的关键,允许程序在执行期间,借助ReflectionAPI取得任何类的内部信息,在程序的运行状态中,可以构造任意一个类的对象,也可以了解任意一个类的对象(所属类、成员变量、方法等),并且可以去调用属性和方法,这种动态去获取程序信息,以及动态调用对象的功能,称为java反射机制。一个应用程序总是由很多个类组成,java程序在启动时,并不是一次把所有的类加载运行,而是把保证程序运行的基础类先加载在JVM中,其他类等到JVM用到的时候再进行加载,这样可以节省内存开销。显示加载:通过Class。

qq435694701的博客 532

类装载器ClassLoader

类装载器工作机制类装载器就是寻找类的节码文件并构造出类在JVM内部表示对象的组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤: [1.]装载:查找和导入Class文件; [2.]链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的: [2.1]校验:检查载入Class文件数据的正确性; [2....

weixin_30256505的博客 83

java反射 映射_Java反射机制详解

Java反射机制详解Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。1、关于Class1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性2...

weixin_39788451的博客 277

java反射机制详解_Java反射机制详解

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。1、关于Class1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性2、对象照镜子后(反射...

weixin_39747807的博客 98
上一篇: JAVA反射机制深入学习(二)实例演示JAVA反射机制的应用
下一篇: Spring学习(八)Spring IoC容器原理分析
wangxin1248
博客等级 码龄11年 305粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值