java——了解反射

news2024/9/29 17:22:23

目录

什么是反射?

反射如何获取类信息?

小结:


什么是反射?

               反射是用代码分析类信息的能力

类中有哪些信息:方法、对象、构造器、全局变量、父类、接口等....

反射如何获取类信息?

三种方式

1.通过对象的getClass方法进行获取

2.通过Class.forName()方法获取

3.通过静态属性class可直接获取到该类型对应的Class对象 例如:T.class 将代表匹配的类对象

面试题:反射能不能通过反射访问类的私有信息?

                   可以   将下面代码设置成true

 

 这种方式为暴力反射,写个demo演示一下

获取全局变量信息的方式 Filed:

public class Reflection {
    private String name;

    @Override
    public String toString() {
        return "reflection{" +
                "name='" + name + '\'' +
                '}';
    }
}
class violence{
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Reflection reflection = new Reflection();
        Field name = Reflection.class.getDeclaredField("name");
        name.set(reflection,"小黑子");
        System.out.println(reflection);
    }
}
  name.setAccessible(true);   不加这行代码时运行结果: 

 

 报错显示 无法直接访问private修饰的私有成员name属性

Exception in thread "main" java.lang.IllegalAccessException: 
Class com.qcby.test.demo.violence can not access a member of class 
com.qcby.test.demo.Reflection with modifiers "private"

添加后:就能够访问name属性了

小结:

反射获取类的全局变量

1. 类对象.getDeclaredFields() 获取所有的全局变量 需要使用Filed[]接收

2. 类对象.getFields() 获取所有的public修饰的全局变量 需要使用Filed[]接收

3. 类对象.getDeclaredField(“变量名”) 能够获取指定的任何修饰符修饰的全局变量信息 需要使用Filed接收

4. 类对象.getField(“变量名”) 能够获取指定的public修饰符修饰的全局变量信息 需要使用Filed接收

返回获取方法 Method:

public class Reflection {
    private String name;

    private void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "reflection{" +
                "name='" + name + '\'' +
                '}';
    }
}
class violence{
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Reflection reflection = new Reflection();
//        Field name = Reflection.class.getDeclaredField("name");
//        name.setAccessible(true);
//        name.set(reflection,"小黑子");
        Method setName = Reflection.class.getDeclaredMethod("setName", String.class);
        setName.setAccessible(true);
        setName.invoke(reflection,"cxk");
        System.out.println(reflection);
    }
}

小结:

获取类的方法的方式

1. 类对象.getDeclaredMethods() : 这种方式 获取所有的 方法信息 Method[]

2. 类对象.getMethods() : 这种方式 获取public修饰的 方法信息 Method[]

3. 类对象.getDeclaredMethod("方法名",所有参数的类型) 获取所有的指定的方法信息 Method

4. 类对象.getMethod("方法名",所有参数的类型) 获取public的指定的方法信息 Method


以上是个人对反射学习后的总结,希望对你有帮助,不足请补充!

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

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

相关文章

k8s client-go源码解析之informer 二

Informer(二) 注意:本文内容为学习笔记,内容为个人见解,不保证准确性,但欢迎大家讨论何指教。 本篇介绍cache.SharedIndexInforme中 Controller及其组件 informer大致工作流程如下: sharedI…

CVS Health 西维斯健康EDI需求

CVS Health西维斯健康在特拉华州成立,通过旗下的 CVS Pharmacy 和 Longs Drugs 零售店以及 CVS.com 电商提供处方药、美容产品、化妆品、电影和照片加工服务、季节性商品、贺卡和方便食品。CVS Health通过使高质量的护理变得更经济、更易获得、更简单、更无缝&#…

中国通信行业十大杰出女性,看看你认识几个?

注:排名不分先后█ 01 中国信息通信研究院副院长 王志勤王志勤王志勤在中国乃至全球通信行业具有极高的知名度。她1992年毕业于北京邮电大学无线通信专业,在通信领域辛勤耕耘了三十余年,长期从事标准研究和制定工作,参与了中国从2…

C 语言网络编程 — 高并发 TCP 网络服务器

目录 文章目录目录TCP Socket 编程示例服务端客户端测试高并发 TCP 网络服务器I/O 并发模型设计系统文件描述符数量限制完全断开连接导致的性能问题关注 TCP 连接的状态合理配置 TCP 连接内核参数使用 shutdown() 来确保 Connection 被正常关闭断开重连问题使用 Heartbeat 来判…

【强化学习】强化学习数学基础:时序差分方法

时序差分方法Temporal Difference Learning举个例子TD learning of state values算法描述TD learning of action values: SarsaTD learning of action values: Expected SarsaTD learning of action values: n-step SarsaTD learning of optimal action values: Q-learningA un…

【Redis】主从集群 实现读写分离(二)

目录 2.Redis主从 2.1.搭建主从架构 2.2.主从数据同步原理 2.2.1.全量同步 2.2.2.增量同步 2.2.3.repl_backlog原理 2.3.主从同步优化 2.4.小结 2.Redis主从 2.1.搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,…

YOLOv7、YOLOv5改进之打印热力图可视化:适用于自定义模型,丰富实验数据

💡该教程为改进YOLO高阶指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡更多改进内容📚可以点击查看:YOLOv5改进、YOLOv7改进、YOLOv8改进、YOLOX改进原创目录 | 唐宇迪老师联袂推荐🏆 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可�…

【毕业设计】Java局域网聊天室系统的设计与实现

点击免费下载源码 视频聊天系统作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的音、视频信息的传递和服务,具有极其广泛的发展前景。 介绍了采用JAVA编程开发视频聊天系统的一套比较常用的解决方案。文字聊…

Spring之实例化Bean _ @Resource和@Autowired实现原理(3)

目录 1. 搜集注解信息 applyMergedBeanDefinitionPostProcessor(*) 2. 将实例化的Bean放入3级缓存中 addSingletonFactory(***)为循环依赖做准备 3. 根…

RS232/RS485信号接口转12路模拟信号 隔离D/A转换器LED智能调光控制

特点:● RS-485/232接口,隔离转换成12路标准模拟信号输出● 可选型输出4-20mA或0-10V控制其他设备● 模拟信号输出精度优于 0.2%● 可以程控校准模块输出精度● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围:10 ~ 30VDC● 可靠…

搭建SpringBoot多模块微服务项目脚手架(一)

搭建SpringBoot多模块微服务项目脚手架(一) 文章目录搭建SpringBoot多模块微服务项目脚手架(一)1.概述2.微服务环境搭建介绍1.微服务环境描述2.搭建环境组件和版本清单3.搭建父模块环境3.1.创建springboot父工程1.创建springboot2.配置maven和java3.精简父模块4.pom文件配置5.父…

记录--服务端推送到Web前端有哪几种方式?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这个问题? 这个问题一般会出现在面试题里面,然后回答一些诸如轮询、WebSocket之类的答案。当然,实际开发中,也会遇到类似别人给你赞了,要通知…

华为OD机试题,用 Java 解【一种字符串压缩表示的解压】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

20230309英语学习

What Is Sleep Talking? We Look at the Science 为什么人睡觉会说梦话?来看看科学咋说 Nearly everyone has a story about people talking in their sleep.Though it tends to be more common in children, it can happen at any age:A 2010 study in the jour…

如何恢复已清空的 Windows 回收站?

Windows 95 中引入的回收站文件夹(也称为垃圾桶)是有史以来最有用的功能之一,可以保护您免受自己的错误和粗心大意的影响。 通常,从文件夹中恢复丢失的文件就像单击桌面上的回收站图标并执行简单的拖放操作一样简单。 但是&…

Java实例实验项目大全源码企业通讯打印系统计划酒店图书学生管理进销存商城门户网站五子棋

wx供重浩:创享日记 对话框发送:java实例 获取完整源码源文件视频讲解文档资料等 文章目录1、企业通讯2、快递打印系统3、开发计划管理系统4、酒店管理系统5、图书馆管理系统6、学生成绩管理系统7、进销存管理系统8、神奇Book——图书商城9、企业门户网站…

数据库管理-第六十期 监听(20230309)

数据库管理 2023-03-09第六十期期 监听1 无法访问2 监听配置3 问题复现与解决4 静态监听5 记不住配置咋整总结第六十期期 监听 不知不觉又来到了一个整10期数,我承认上一期有很大的划水的。。。嫌疑吧,本期内容是从帮群友解决ADG前置配置时候的一个问题…

C51---定时器中断相关寄存器

1.中断系统,是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事情的时候,要求CPU暂停当前任务或工作,转而去处理这这个紧急事件。处理完以后,再回到原来的被中断的地方,继续原来的工…

华为OD机试题,用 Java 解【寻找相同子串】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

RoCEv2网络部署实践

延续上篇RoCE网络的介绍,我们知道承载ROCEv2流量必须有一张无损网络。 本章主要介绍在以太网环境部署无损网络的关键点。 首先是QoS,包含流分类和队列调度两部分。 流分类:在网络接入设备(TOR)配置if-match类的语句&am…