[Java]类加载与反射

详解 Java 类加载与反射(笔记) Java 类加载机制 Java 内存分析 jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。 链接:将java类的二进制代码合并到jvm的运行状态之中的过程,链接过程又分为3个过程: (1)、验证:确保加载的类信息符合jvm规范,没有 阅读详情
前言
今天呢介绍下类加载与反射,下面会说一下方面的内容,类的加载连接初始化,以及反射相关的内容.
内容

总括

在这里插入图片描述
关于类加载这部分.在平时的做项目的过程中是基本上不会涉及到的,但是其中的原理却是清楚的知道的.根据书上的讲解以及自己的总结,大致总括如图,希望有助于大家的理解.

类的初始化

简而言之,什么是类的初始化,就是在类第一次使用的时候进行的准备以及预加载

使用场景

1.创建类实例
2.调用静态方法
3.访问静态属性,赋值静态属性
4.final修饰的静态属性
5.直接使用java.exe
6.子类初始化,父类也必须初始化

步骤

1.加载
2.连接
3.初始化静态方法
在这里插入图片描述

类加载

三种机制

1.全盘负责。所谓全盘负责,就是当一个类加载器负责加载某个Class时,该Class所依赖的和引用的其它Class也将由该类加载器负责载入,除非显式使用了另一个类加载器来载入。
2.父类委托。先让parent(父)类加载器试图加载该Class,只哟偶在父类加载器无法加载该类时才常识从自己的类路径中加载该类
3.缓存机制。缓存机制将会保证所有加载过的Class都会被缓存,当程序需要使用某个Class时,类加载器先从缓冲区搜索该CLass,只有当缓存区中不存在该Class对象,系统才会读取带类对应的二进制数据,并将其转换成Class对象,存入缓冲区。(这就是为什么修改Class后,必须重新启动JVM,程序所做的修改才会生效的原因

classloader自定义类加载

一、 方法

1.使用loadclass 还需要通过findclass来进行检查类是否加载,如果有父类需要使用根加载器
2.使用findclass 不需要其他步骤
3.利用findclass进行重写 会比较方便
总结:使用findclass会避免默认类的加载器的父类委托,缓冲机制两种策略,重写LoadClass逻辑会复杂.

二、 使用场景

1.反编译代码
2.动态加载类
3.加载字节码数据
4.提交代码前自动验证数字签名

URLClassLoader

反射

AOP

小结
感谢您的阅读~~
BambuStudio学习笔记:GCode 类 关键成员解析 核心配置组件 状态跟踪系统 功能模块集成 核心方法剖析 主输出管道 实现多阶段处理: 分层处理流程: 实现智能路径规划: 关键特性: 实现模板故障检测: 采用三级流水线: 支持扩展类型: 实现多通道输出: 采用: 实现: 支持: 支持模块化编译: 典型流程: 实现功能: 阅读详情

相关推荐

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 460

反射机制和类加载机制

1.反射的定义 3.反射相关的类 4.Class类代表类的实体,在运行的java应用程序中表示类和接口。java文件被编译后生成.class文件,JVM此时就要去解读.class文件。java.class文件也会被JVM解析为一个对象,这个对象就是java.lang.class。这样当程序在运行时,每个java文件就最终变成了Class类对象的实例。我们通过java的反射机制应用到这个实例,就可以去获取、添加、改变这个类的属性和方法。使得这个类成为一个动态的类。Class对象是反射的基础,一个类对应一

yahid的博客 1057

74hc595驱动模块的Verilog设计(线性状态机)

module hc595_driver( input clk, //50Mhz input rst_n, //复位信号 input [15:0] data, //数码管待显示数据,8位段选数据,8位位选数据 input en, //使能 o...

qq_41294540的博客 3740

Java学习笔记(十三)

Java学习笔记(十三) Junit单元测试 测试分类 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值 白盒测试:需要写代码的,关注程序具体的执行流程 Junit使用(白盒测试) 使用步骤 定义一个测试类 定义测试方法:可以独立运行 给方法加@Test注解 导入junit依赖 结果 红色:失败 绿色:成功 一般我们会使用断言操作处理结果 Assert.assertEquals(期望的结果,实际的结果); @Test public void testAdd(){ //创

qq_45184360的博客 259

Stable-Baselines3性能优化:多环境训练对比指南(DummyVecEnv vs SubprocVecEnv)

本文深入对比了Stable-Baselines3中DummyVecEnv与SubprocVecEnv两种向量化环境的性能差异与应用场景。DummyVecEnv适用于轻量级、步进快的环境,调试友好且开销低;而SubprocVecEnv则通过真正的多进程并行,能显著加速计算密集型环境的训练。文章通过基准测试与决策树,指导开发者根据环境计算成本、CPU核心数等关键因素做出最优选择,以实现训练效率最大化。

weixin_29063979的博客 147

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 429

类加载和反射

类加载过程和机制的讲解和反射的使用

学习记录和总结 2万+

【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

【代码】【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

m0_61126667的博客 4856

java之反射及类的加载

一、类的加载:1、定义 2、类加载器分类 二、反射:1、定义 2、反射机制的相关API 3、反射的运用:

SO_zxn的博客 526

戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列

【代码】戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列。

路~可以走过 1897

CloudCompare 二次开发(16)——计算点云最值

不依赖任何第三方点云相关库,使用ClopudCompare计算点云最值。

点云侠的博客 517

反射与类加载器

反射: 所谓的反射就是指,在java程序运行时,获得某些对象的实际结构与类型的过程。 创建对象的方式: 用new调用构造方法创建对象 用newInstance()按照类型创建对象 用Class.formName()根据类名创建对象(类型必须在jar包中,不然创建不了) 类加载器: ClassLoader:在JVM启动的过程中,把类模板加载到内存中的工具。就是将一个存在与系统文件中的.class文件,加载到当前JVM的内存中,变成java能识别的Class类型。 启动项加载器:由C语言完成的,当JV

qq_43234235的博客 485

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

WW、forever的博客 195

JAVA反射与类加载机制

JAVA反射与类加载机制JAVA反射动态语言反射机制反射的应用场合JAVA反射API反射使用步骤获取Class对象通过反射创建对象JVM类加载机制类加载的声明周期类加载器双亲委派模型 JAVA反射 动态语言 动态语言:程序在运行时可以改变结构,新的函数可以引进,已有的函数可以被删除等结构上的变化。 从反射角度说JAVA属于半动态语言。 反射机制 java反射机制:在运行状态下,对任意一个类都...

lym3lavender的博客 3702

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java的类加载、反射

类加载、反射

linwq8的博客 1381

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java类加载器与反射机制

文章目录1.类加载器1.1类加载1.2类加载器1.2.1类加载器的作用1.2.2JVM的类加载机制2.反射2.1反射的概述2.2获取Class类对象的三种方式2.3反射获取构造方法并使用2.4反射获取构造方法2.5反射获取构造方法2.6反射获取成员变量并使用2.7反射获取成员变量并使用练习2.8反射获取成员方法并使用【应用】2.9反射获取成员方法并使用练习2.10反射的案例 1.类加载器 1.1类加载 类加载的描述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初

逐梦er的博客 2167

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java类加载与反射

Java类加载与反射 类加载、连接、初始化 JVM和类 当运行某个Java程序时,将会启动一个Java虚拟机进程,不管Java程序里面多么复杂,都处于该Java虚拟机进程里面。 当Java程序运行结束,JVM进程结束,该进程在内存中的状态将丢失 public class A { // 定义该类的类变量 public static int a = 6; } 接下来...

Coder_py的博客 322

【Java基础】反射;Java类加载以及反射

十、反射 类加载 当程序要使用某个类时,如果该类还没有被加载到内存中时,该系统会通过类的加载、类的连接、类的初始化三个步骤来对类进行初始化。如果没有出现意外,JVM会连续完成这三个步骤,所以有时也将这三个步骤统称为类加载或类初始化。 类的加载 类加载就是将class文件读入内存,并为之创建一个java.lang.Class的对象 任何类被使用时,系统都会为之建立一个Java.lang.Class对象 类的连接 验证阶段:用于检验被加载的类是否具有正确的内部结构,和其他类是否协调一致 准备阶段:负责为类

雨下一整晚real的博客 328

java的类加载与反射

如果当前类加载器无法加载,则向下委托给子类加载器,此时子类加载器才 会尝试加载,成功则返回,失败则继续往下委托,如果所有的加载器都无法加载 该类,则会抛出ClassNotFoundException,这就是双亲委托机制。如果一个类加载器收到类加载请求,它并不会自己先去加载,而是把这个请求 委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向 上委托,最终加载请求会到达顶层的启动类加载器 Bootstrap ClassLoader。垃圾回收器负责自动回收不再使用的对象和释放内存空间。

2202_75439040的博客 713

Java反射与类加载机制

前面在学习Xposed Hook的时候经常会用到反射与类加载器,这次就学习下Java中的反射与类加载机制。 1. Java反射 我们知道Java中的对象有编译类型和运行类型(例如多态),举个例子: Object obj = new java.util.Date(); 编译类型为Object,运行类型(即obj对象真实的类型)其实为java.util.Date,那么如果想要根据obj对象调用Date类中的一个方法例如toLocaleString,应该怎么做?我们首先想到的可能就是多态中常见的使用方法-强.

iris的博客 534

Java类加载器与反射

一个命令对应一个进程 当我们启动一个Java程序,即启动一个main方法时,都将启动一个Java虚拟机进程,不管这个进程有多么复杂。而不同的JVM进程之间是不会相互影响的。这也就是为什么说,Java程序只有一个入口——main方法,让虚拟机调用。而两个mian方法,对应的是2个JVM进程,启动的是两个不同的类加载器,操作的实际上是不同的类。故而不会互相影响。 类加载 当我们使用一个类,如果这个类还未

天行九歌 3300

【JVM】Java 反射原理及类加载过程

Java反射机制摘要 Java反射机制允许程序在运行时动态获取类的内部信息并操作对象属性方法。核心是Class对象,记录了类的元数据。类加载过程分为三步:加载(读取.class文件)、链接(验证、准备、解析)、初始化(执行静态代码)。通过Class对象可获取构造器、字段和方法等元信息,实现动态调用。反射常用于框架开发(如Spring IOC)、动态代理和插件扩展,能突破封装性访问私有成员,但也带来性能开销和安全风险。典型应用包括动态创建对象、方法调用和属性操作,为Java提供了强大的运行时灵活性。

Shad0wLEO的博客 972

java 类加载和 反射

一、Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 2.工作机制 类装载器就是寻找类的字...

一蓑烟雨 341

java类加载器反射

一,什么是类加载器 类加载器器:负责将.class文件(存储的物理文件)加载到内存中 类加载时机: 1,创建类的实例(对象) 2,调用类的方法 3,访问类或者接口的类变量,或者为该类变量赋值 4,使用反射方式来强制创建某个类或接口对应的java.lang.class对象 5,初始化某个类的之类 6,直接使用java.exe命令来运行某个主类 用到就加载,不用不加载 二,类加载器的过程 1,加...

weixin_52376699的博客 272

【Java高级】类加载与反射暴破

本文介绍了动态加载与静态加载的区别,并就类加载过程的五个阶段进行了深入讲解。文章还总结了反射暴破的知识,包括:通过反射创建对象、反射暴破访问私有构造器、反射暴破操作属性、反射暴破操作方法等。

黄小黄的博客 1104

Java中类加载机制与反射

详细介绍Java中类加载机制与反射,包括基本概念、类加载器、反射、JavaBean内省和代理。

行者牛仔 1935
上一篇: 基于比较的排序(一)
下一篇: 多线程-单例模式与多线程
刘佳欢--hannah
博客等级 码龄11年 82粉丝 138原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值