java反射常用方法

反射思维导图

请添加图片描述

使用案例

package Reflection.Work.WorkTest01;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;public class WorkDemo01 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class<?> aClass = Class.forName("Reflection.Work.WorkTest01.Student");Constructor<?> constructor = aClass.getConstructor(String.class);Constructor<?> constructor1 = aClass.getConstructor();System.out.println(constructor);System.out.println(constructor1);constructor.newInstance("888");constructor1.newInstance();Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(Integer.class);System.out.println(declaredConstructor);declaredConstructor.setAccessible(true);Object o = declaredConstructor.newInstance(9898);declaredConstructor.setAccessible(false);System.out.println("---------------------Method--------");Method[] methods = aClass.getMethods();System.out.println(Arrays.toString(methods));//包括继承的Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();System.out.println(Arrays.toString(declaredConstructors));Method speak = aClass.getMethod("speak", String.class);System.out.println(speak);Student student = (Student) aClass.newInstance();Object kkk = speak.invoke(student, "kkk");System.out.println(kkk);Field[] declaredFields = aClass.getDeclaredFields();System.out.println(Arrays.toString(declaredFields));}
}
package Reflection.Work.WorkTest01;public class Student {private String name;private Integer age;public Integer id;public String sex;public Student() {System.out.println("无参");}public String speak(String s){System.out.println(s);return s;}private String speak1(String s){System.out.println(s);return s;}private Student(Integer age){System.out.println(age);}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Student(String name) {this.name = name;System.out.println(name);System.out.println("有参");}public Student(String name, Integer age, Integer id, String sex) {this.name = name;this.age = age;this.id = id;this.sex = sex;System.out.println("有参");}
}

上面代码使用Java的反射机制来获取和操作类的信息。具体是:

  Class.forName("Reflection.Work.WorkTest01.Student"):通过类的全限定名获取对应的Class对象。这里获取了名为"Reflection.Work.WorkTest01.Student"的类的Class对象。aClass.getConstructor(String.class)和aClass.getConstructor():通过Class对象获取类的构造方法。getConstructor(String.class)获取了带有一个String参数的构造方法,getConstructor()获取了无参构造方法。constructor.newInstance("888")和constructor1.newInstance():通过构造方法的实例对象来创建类的实例。newInstance("888")使用带有一个String参数的构造方法创建实例,newInstance()使用无参构造方法创建实例。aClass.getDeclaredConstructor(Integer.class)和declaredConstructor.newInstance(9898):通过Class对象获取类的私有构造方法,并通过私有构造方法创建实例。getDeclaredConstructor(Integer.class)获取了带有一个Integer参数的私有构造方法,newInstance(9898)使用私有构造方法创建实例。aClass.getMethods()和aClass.getDeclaredConstructors():通过Class对象获取类的方法和构造方法。getMethods()获取类的所有公共方法(包括继承的方法),getDeclaredConstructors()获取类的所有构造方法(包括私有构造方法)。aClass.getMethod("speak", String.class):通过Class对象获取类的指定方法。getMethod("speak", String.class)获取了名为"speak"、带有一个String参数的公共方法。speak.invoke(student, "kkk"):通过方法的实例对象来调用方法。invoke(student, "kkk")调用了类的方法"speak",并传入了一个String参数。aClass.getDeclaredFields():通过Class对象获取类的所有字段(包括私有字段)。

上面代码使用反射机制动态获取了类的构造方法、方法和字段,并通过反射调用了类的构造方法和方法。通过反射,可以在运行时动态地获取和操作类的信息,提供了更大的灵活性和扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10-Nacos-灰度发布配置

用于生产上线后&#xff0c;针对指定主机IP做定向测试 1、在配置编辑中&#xff0c;勾选Beta发布&#xff0c;在文本框中勾选需要下发服务的IP地址&#xff0c;多个用英文逗号分隔。 正式版&#xff1a;这个是针对除了Beta版中指定的IP服务生效Beta版&#xff1a;灰度配置&am…

华为HCIP Datacom H12-831 卷17

1、以下关于本地LDP会话和远端LDP会话的描述,正确的有哪些项? A 本地LDP会话和远端LDP会话可以共存 B 缺省情况下,本地LDP会话发现阶段的报文目的IP为224.0.0.2 C 缺省情况下,远端LDP会话发现阶段的报文目的端口号为UDP646 D 缺省情况下,远端LDP会话发现阶段的报文…

粤Z车牌申请需要什么条件?

深圳湾口岸: 上一年度纳税数额达到15万元以上的&#xff0c;可以申办1个商务车指标 上一年度的纳税数额达到50万元以上的&#xff0c;可以申办第2个商务车指标; 上一年度的纳税数额达到100万元以上的&#xff0c;可以申办第3个商务车指标; 从申办第4个商务车指标起&#xff0c;…

yolov8:pt 转 onnx

yolov8官方教程 1.安装包 我使用的是虚拟环境&#xff0c;yolov8包已经下载到本地了&#xff0c;因此直接在anaconda prompt 命令行继续安装 首先激活自己的虚拟环境&#xff0c;然后执行安装命令 pip install ultralytics yolov8中没有requirement.txt文件&#xff0c;直接…

RTC实时时钟之读取时间

1. RTC 基本介绍 RTC(Real Time Clock) 即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电 2. RTC 控制器 2.1 RTC的特点是:…

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第四篇&#xff0c;记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息&#xff0c;还可以解决k…

[BUUCTF]-PWN:cmcc_pwnme2解析

保护 ida 完整exp&#xff1a; from pwn import* context(log_leveldebug) #premote(node5.buuoj.cn,26964) pprocess(./pwnme2) addhome0x8048644 addflag0x8048682 getfile0x80485CB main0x80486F8 pop_ebp0x8048680 ret0x80483f2 pop_ebx0x8048409 pop_edi_ebp0x804867f st…

常见的网络安全威胁和防护方法

随着数字化转型和新兴技术在各行业广泛应用&#xff0c;网络安全威胁对现代企业的业务运营和生产活动也产生了日益深远的影响。常见的网络安全威胁通常有以下几种&#xff1a; 1. 钓鱼攻击 攻击者伪装成合法的实体&#xff08;如银行、电子邮件提供商、社交媒体平台等&#xf…

超越传统—Clean架构打造现代Android架构指南

超越传统—Clean架构打造现代Android架构指南 1. 引言 在过去几年里&#xff0c;Android应用开发经历了巨大的变革和发展。随着移动设备的普及和用户对应用的期望不断提高&#xff0c;开发人员面临着更多的挑战和需求。传统的Android架构在应对这些挑战和需求时显得有些力不从…

Java技术栈 —— Cookie和Session

在 Web 开发中&#xff0c;Cookie 和 Session 都是用于存储和管理用户状态信息的机制。 Cookie Cookie 是一小段文本数据&#xff0c;由服务器发送到用户的浏览器&#xff0c;并在浏览器中存储。 它包含了一些关于用户的信息&#xff0c;例如用户名、登录状态、购物车内容等。 …

WDM式驱动的基本结构3 - WDM驱动程序的AddDevice例程

AddDevice例程是WDM驱动所独有的&#xff0c;在NT驱动中没有该例程。在DriverEntry中&#xff0c;需要设置AddDevice例程的函数地址。设置的方式是驱动对象中有个 DriverExtension 子域&#xff0c;DriverExtension中有个AddDevice子域&#xff0c;将该子域指向AddDevice例程的…

笔记---中国剩余定理

全程学自y总 AcWing.204.表达整数的奇怪方式 给定 2 n 2n 2n 个整数 a a a1, a a a2,…, a a an 和 m m m1, m m m2,…, m m mn&#xff0c;求一个最小的非负整数 x x x&#xff0c;满足 ∀ i ∈ [ 1 , n ] , x ≡ m ∀i∈[1,n],x≡m ∀i∈[1,n],x≡mi ( m o d a (mod a (…

【大语言模型】大型语言模型的数据收集和预处理

前言 LLM(大型语言模型)是先进的人工智能模型,使用大量文本数据进行广泛的训练。 通过这种培训,他们学习语言结构和模式,并能够执行各种与语言相关的任务,例如摘要、翻译、情感分析等。 由于LLM具有执行以前机器难以完成的自然语言任务的卓越能力,近年来LLM受到了广泛关…

ES客户端接入方式

在 Elasticsearch (ES) 中&#xff0c;有两种常见的客户端接入方式&#xff1a;Transport Client&#xff08;传输客户端&#xff09;和 Node Client&#xff08;节点客户端&#xff09;。这两种客户端都可用于与 Elasticsearch 集群进行通信和执行操作&#xff0c;但它们在连接…

博科交换机常用配置命令

文章目录 1、光纤交换机IP地址查询2、什么是Zone3、创建 zone和cfg 3-1、使用 zonecreate 命令创建 zone 3-2、使用cfgcreate 命令创建cfg 3-3、使用 cfgenable 生效配置文件 3-4、使用cfgsave保存 配置文件 3-5、显示 zone 信息 4、常用后…

Backtrader 文档学习- Broker - Fillers

Backtrader 文档学习- Broker - Fillers 1. 概述 当使用交易量进行订单执行时&#xff0c;backtrader的模拟broker具有默认策略&#xff1a; 忽略交易量 &#xff08;默认策略是broker忽略成交量&#xff09; 基于两个前提条件&#xff1a;在流动性充裕的市场中进行交易&…

深度强化学习(王树森)笔记11

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

HTML5的新特性

目录 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 三&#xff0c;新增input表单 四&#xff0c;新增的表单属性 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 1&#xff0c;音频&#xff1a;<audio>.。。用MP3 <audio src…

带自执行安装脚本的ROS包的生成

带自执行安装脚本的ROS包的生成 在打包和安装ROS包时, 会有一些固定的配置需要去人为实现, 比如网络配置, 设备树的管理等, 比较麻烦, 不如一次性解决掉, 所以查了相关文档 过程: # 使用bloom-generate rosdebian生成debian文件夹 bloom-generate rosdebian # 进入debian文件…

ICV:signoff_check_drc脚本

更多学习内容请关注「拾陆楼」知识星球 拾陆楼知识星球入口 往期文章链接: ICV:metal fill insertion流程 ICV:metal fill insertion脚本