Java基础数据结构之反射
一.定义
Java的反射机制是在运行状态中的,对于任意一个类都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法及属性。既然能拿到,我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射(reflection)机制。
二.反射基本信息
三.与反射相关的类
Class类:代表类的实体,在运行的Java应用程序中表示类和接口(就是说,比如在程序中创建了一个Person类,那么就有一个Class对象,里面存放Person类的相关内容)
Field类:代表类的成员变量/类的属性
Method类:代表类的方法
Constructor类:代表类的构造方法
四.Class类
Class类是反射机制的起源Java文件被编译后,生成了.class文件,JVM此时就要去解读.class文件 ,被编译后的Java文件.class也被JVM解析为一个对象,这个对象就是 java.lang.Class .这样当程序在运行时,每个java文件就最终变成了Class类对象的一个实例。我们通过Java的反射机制应用到这个实例,就可以去获得甚至去添加改变这个类的属性和动作,使得这个类成为一个动态的类 .
1.获得Class对象的三种方法
1.使用Class.forName(“类的全路径名”)。注意,这里是类的全路径,如果有包需要加上包的路径

返回值是Class<?>类型,它会抛出受查异常,所以要用try,catch或者用throws。Class后面不加<?>也可以,如下:

2.使用类对象的getClass()方法

3.使用类名.class方法。

这种方法最为安全可靠,程序性能更高。这也说明任何一个类都有一个隐含的静态成员变量class,因为使用对象的实例无法点出class
2.一个类在JVM中只会有一个Class实例
所以有如下代码:


五.反射的具体使用
通过反射,可以调用或修改任何权限的成员变量及方法,包括private权限的
1.通过反射创建对象
用到了newInstance()方法,源码如下:

注意,该方法会抛出受查异常,所以要try catch,代码如下:

但还是报错,为什么?因为该方法的返回值是泛型类,由擦除机制变成Object类,然后要将它给到一个Student引用,就相当于是向下转型,所以要用强制类型转换,如下:

2.调用构造方法
首先是getConstructor方法,可用于调用公有的构造方法,即调用public修饰的方法getDeclaredConstructor是用于调用私有的构造方法,即调用private修饰的方法。
如何调用以下这个私有的构造方法

先看源码:

该方法的参数是构造方法的参数类型,返回值是Constructor<T>,如下使用:

首先要产生一个Constructor对象,然后通过Constructor中的newInstance方法来实例化对象,但运行时报错啦,原因是:Java中为例保证安全性,在调用private修饰的方法前要将许可设置为true,即调用setAccessible方法,设置为true,如下:

但是这样还是在报错,为什么?因为第二个参数是int,所以在getDeclaredConstructor中要传入int.class,而不是Integer.class。如下:

所以从某种程度上来说,反射打破了Java的封装机制,本来private修饰的方法竟然可以在类外被调用
3.反射私有属性
getField是获得某个公有的属性对象,即只能获得由public修饰的属性
getDeclaredField是获得某个属性对象,可以是任何权限的,包括private修饰的,代码如下:

如果要对得到的属性进行修改,就必须加上被注释掉的那句代码:

表示把s1这个对象的年龄修改为13。
注意,这个方法的返回值是Field,而不是Field<?>,所以只可以用Field接收。
4.调用私有方法
相关文章:
Java基础数据结构之反射
一.定义 Java的反射机制是在运行状态中的,对于任意一个类都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法及属性。既然能拿到,我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能…...
【实战系列----消息队列 数据缓存】rabbitmq 消息队列 搭建和应用
线上运行图,更新不算最新版,但可以使用修改线程等补丁功能,建议使用新版本。 远程服务器配置图: 这个可以更具体情况,因为是缓存队列理所当然 内存越大越好,至于核心4核以上足够使用。4核心一样跑 这里主要是需要配置服…...
【云原生kubernetes系列】---亲和与反亲和
1、亲和和反亲和 node的亲和性和反亲和性pod的亲和性和反亲和性 1.1node的亲和和反亲和 1.1.1ndoeSelector(node标签亲和) #查看node的标签 rootk8s-master1:~# kubectl get nodes --show-labels #给node节点添加标签 rootk8s-master1:~# kubectl la…...
【极简】Pytorch中的register_buffer()
register buffer 定义模型能用torch.save保存的、但是不更新参数。 使用:只要是nn.Module的子类就能直接self.调用使用: class A(nn.Module): #... self.register_buffer(betas, torch.linspace(beta_1, beta_T, T).double()) #...手动定义参数 上述…...
J-Link:STM32使用J-LINK烧录程序,其他MCU也通用
说明:本文记录使用J-LINK烧录STM32程序的过程。 1. J-LINK驱动、软件下载 1、首先拥有硬件J-Link烧录器。 2、安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com 直接下载就可以了。 2.如何使用J-LINK向STM32烧写程序 1、安装好以后打开J-LINK Fl…...
从0到1入门C++编程——06 类和对象之多态、文件操作
文章目录 多态1.多态基本概念2.多态案例——计算器3.纯虚函数和抽象类4.多态案例——制作饮品5.虚析构和纯虚析构6.多态案例——电脑组装 文件操作1.文本文件--写文件2.文本文件--读文件3.二进制文件--写文件4.二进制文件--读文件 多态 1.多态基本概念 多态是C面向对象的三大…...
elementUI实现selecttree自定义下拉框树形组件支持多选和搜索
elementUI实现selecttree自定义下拉框树形组件支持多选和搜索 效果图定义子组件父组件应用 效果图 定义子组件 主要结合el-select和el-tree两个组件改造的。 <template><div class"selectTree"><el-select filterable :filter-method"filterMe…...
使用 Spring Boot 构建 Docker 镜像的简易指南
Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。结合 Docker,你可以方便地将你的 Spring Boot 应用程序打包成一个容器镜像,实现更加灵活和可移植的部署。本文将指导你如何使用 Docker 构建一个包含 Spring Boot 应用程序的镜像。…...
「数据结构」3.ArrayList
🎇个人主页:Ice_Sugar_7 🎇所属专栏:Java数据结构 🎇**欢迎点赞收藏加关注哦!* ArrayList 🍉ArrayList的构造🍉add方法🍌扩容机制🍌重要结论 🍉其…...
H.264与H.265的主要差异
H.265仍然采用混合编解码,编解码结构域H.264基本一致, H.265与H.264的主要不同 编码块划分结构:采用CU (CodingUnit)、PU(PredictionUnit)和TU(TransformUnit)的递归结构。 并行工具:增加了Tile以及WPP等并行工具集以提高编码速…...
【数据结构】 归并排序超详解
1.基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序…...
Debezium系列之:深入理解GTID全局事务标识,并记录一次数据库重启造成数据丢失的原因和解决方案
Debezium系列之:深入理解GTID,并记录一次数据库重启造成数据丢失的原因和解决方案 一、背景二、深入理解什么是GTID三、深入理解gtid的uuid部分四、判断GTID之间的顺序大小五、解决方案一、背景 hive数据库的表与源头业务数据库的数据不一致,经过检查发现源头数据库发生了重…...
格式化内存卡后,如何找回丢失的监控视频?
随着摄像头的应用越来越广泛,很多监控摄像头采用了内存卡作为存储介质,方便用户存储和查看摄像头拍摄的视频文件。然而,由于各种原因,监控摄像头的内存卡有时会被意外格式化导致重要数据的丢失,给用户带来诸多困扰。 那…...
《动手学深度学习(PyTorch版)》笔记4.8
注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...
助力水下潜行:浮力调节系统仿真
01.建设海洋强国 海洋蕴藏着丰富的资源,二十大报告强调,要“发展海洋经济,保护海洋生态环境,加快建设海洋强国”。建设海洋强国旨在通过科技创新驱动、合理开发利用海洋资源、强化海洋环境保护与生态修复、提升海洋经济质量等多个…...
Mysql常用sql语句
1、建表语句 --建表语句 CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT ); 2、插入语句 --插入测试数据 insert into test_2 values(1,zhangsan); 3、查询语句 --查询语句 MySQL [test_drds_2]> select * from test_2; -------…...
dubbo rpc序列化
序列化配置 provider <dubbo:service interface"com.example.DemoService" serialization"hessian2" ref"demoService"/>consumer <dubbo:reference id"demoService" interface"com.example.DemoService" seria…...
【C语言】va_list(可变参数处理)
C 语言中的 va_list 类型允许函数接受可变数量的参数,这在编写需要处理不定数量参数的函数时非常有用。va_list 类型是在 stdarg.h 头文件中定义的,它允许函数处理可变数量的参数。下面我们将详细介绍 va_list 的用法以及实际应用示例。 一、va_list的用…...
负载均衡下的webshell连接
一、环境配置 1.在Ubuntu上配置docker环境 我们选择用Xshell来将环境资源上传到Ubuntu虚拟机上(比较简单) 我们选择在root模式下进行环境配置,先将资源文件复制到root下(如果你一开始就传输到root下就不用理会这个) …...
5-4 D. DS串应用—最长重复子串
题目描述 求串的最长重复子串长度(子串不重叠)。例如:abcaefabcabc的最长重复子串是串abca,长度为4。 输入 测试次数t t个测试串 输入样例: 3 abcaefabcabc szu0123szu szuabcefg 输出 对每个测试串,输出最…...
Ender-3固件配置终极指南:5步简单快速性能优化
Ender-3固件配置终极指南:5步简单快速性能优化 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3固件配置是解锁3D打印机…...
中小型企业构建内部AI助手时如何通过Taotoken实现成本与权限的双重管控
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小型企业构建内部AI助手时如何通过Taotoken实现成本与权限的双重管控 应用场景类,企业部署内部AI助手需考虑成本与安…...
NotebookLM移动端隐私策略暗藏风险!第三方SDK调用图谱首次公开,3类敏感行为必须立即禁用
更多请点击: https://kaifayun.com 第一章:NotebookLM移动端隐私策略暗藏风险!第三方SDK调用图谱首次公开,3类敏感行为必须立即禁用 SDK调用图谱首次逆向披露 通过对NotebookLM iOS v2.4.1 与 Android v2.5.0 APK/IPA 的深度静态…...
taotoken如何优化ubuntu上多模型项目的成本与模型选型效率
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken如何优化ubuntu上多模型项目的成本与模型选型效率 在Ubuntu环境下进行多模型实验或A/B测试的项目团队,常常面临…...
CVPR 2023五大技术断层:泛化性、实时性与边缘部署的工程真相
1. 这不是会议速记,而是一份“CVPR 2023技术脉络手绘地图”如果你在搜索引擎里输入“CVPR 2023 summary”,大概率会看到一堆标题党文章:什么“十大突破”、什么“最火模型TOP5”、什么“必看论文清单”。我翻过不下二十篇,结果发现…...
博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!
Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年,于 2026 年 5 月 21 日,他将其迁移到了 FreeBSD。迁移动机:旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...
Frida检测绕过本质:四大系统级锚点与工程化规避策略
1. 这不是“反检测”,而是对 Frida 运行机制的诚实理解很多人一看到“Frida 检测绕过”就本能地往“对抗”“隐藏”“伪装”上想,甚至直接去搜“frida hide”“frida stealth bypass”,结果踩进一堆过时、失效、逻辑错乱的 patch 坑里。我做过…...
FPGA+DSP异构核心板在工业控制与数据采集中的应用与开发指南
1. 项目概述:为什么选择FPGADSP异构核心板?在工业控制、伺服驱动、光伏逆变这些对实时性和算力要求都极高的领域里,选型一块合适的核心板往往是项目成败的第一步。过去,我们可能需要在“高灵活性的FPGA”和“高主频的通用处理器”…...
如何用FARM框架在5分钟内搭建专业问答系统
如何用FARM框架在5分钟内搭建专业问答系统 【免费下载链接】FARM :house_with_garden: Fast & easy transfer learning for NLP. Harvesting language models for the industry. Focus on Question Answering. 项目地址: https://gitcode.com/gh_mirrors/far/FARM F…...
别再用土办法改论文了!书匠策AI官网www.shujiangce.com才是2025届毕业生的“通关密码“
你有没有经历过这种崩溃瞬间? 凌晨两点,你对着电脑屏幕,查重率39%,AIGC疑似率67%。导师发来一条消息:"这篇不像你写的,重写。" 那一刻,你是不是特别想问一句:我到底该怎…...
