java_反射

news/2024/11/8 6:29:03/

反射作用

知道对象有什么,是否可以用,通过字节码对象用于获取对象里面的构造器,字段,方法,具有可扩展的功能.

编写通用代码

字节码对象:

用Class创建的对象,加载在内存中就已经创建了

创建字节码的三种方法

全限定名获取方法:copy类的类名:“cn.wolfcode._02_class.User”

1.Class.forName(“全限定名”),使用较多

Class clz = Class.forName("cn.wolfcode._02_class.User");

2.对象.getClass()

User u=new User();
u.getClass();

3.类名.class

Class clz=User.class;

注意:三种字节码对象是同一个

获取构造器

有Declared的是可以获取私有的构造器,私有的方法,私有的字段

最后单词跟了s的是获取所有

创建字节码对象

Class<User> clz=User.class;

1.获取所有的公共构造器(返回的是数组)

Constructor<?>[] constructors = clz.getConstructors()

2.获取所有公共的,私有的构造器(返回的是数组)

Constructor<?>[] declaredConstructors =clz.getDeclaredConstructors()

3…获取一个公共无参构造器

Constructor<User> constructor = clz.getConstructor();

4.获取一个指定类型的构造器

Constructor<User> declaredConstructor1 = clz.getDeclaredConstructor(String.class);

使用构造器创建对象

可以操作私有的构造器

公共构造器创建对象

1.创建字节码对象

Class<User> clz =(Class<User>) Class.forName("cn.wolfcode._03_constructor.User");

2.获取构造器

Constructor<User> constructor = clz.getConstructor(String.class, int.class);

3.传入实参

User u3 = constructor.newInstance("张三", 24);

私有构造器创建对象

//私有构造器
Constructor<User> declaredConstructor2 = clz.getDeclaredConstructor(int.class);
//暴力反射;设置构造器的可访问性,突破访问权限的限制
declaredConstructor2.setAccessible(true);
User u4 = declaredConstructor2.newInstance(10);

使用反射获取方法

使用反射操作类里面的方法

1.获取公共的和继承过来的方法(返回数组)

//创建字节码对象
Class<User> clz = User.class;
//获取公共的和继承过来的方法
Method[] methods = clz.getMethods();

2.获取自己所有的方法(返回数组)

 Method[] declaredMethods = clz.getDeclaredMethods()

3.获取一个公共的方法

Method dowork = clz.getMethod("dowork", String.class);

4.获取一个私有方法

Method dowork2 = clz.getDeclaredMethod("dowork2");

使用反射调用方法

通过Class中的newInstance调用无参的方法创建对象

User user =clz.newInstance()

//参数:调用对象的方法,实参是什么

公共的调用

dowork.invoke(user,"xxxxx");

私有的调用

//暴力反射
dowork2.setAccessible(true);
dowork2.invoke(user);

http://www.ppmy.cn/news/77164.html

相关文章

【算法】单源最短路径算法——Dijkstra算法

文章目录 一、简介与使用场景二、算法思想三、朴素版Dijkstra四、堆优化版Dijkstra五、总结 一、简介与使用场景 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的&#xff0c;因此又叫狄克斯特拉算法。这是从一个顶点到其余各顶点的最短路径算法&#…

伙伴匹配系统笔记---08

一、笔记 (1) 控制定时任务的执行 1. 浪费资源,想象 10000 台服务器同时 “打鸣” 2. 脏数据,比如重复插入 做法: 1. 分离定时任务程序和主程序,只在 1 个服务器运行定时任务。成本太大 2. 写死配置,每个服务器都执行定时任务,但是只有 ip 符合配置的服务器才真实…

配置文件_xml

XML配置文件是什么 做数据交互的媒介,用于传输数据,解决硬编码问题 注意事项: 1.一个xml文件只有一个根节点(可以是任意名字) 2.所有标签都是成对出现 3.标签不能嵌套使用 4.标签里面可以有属性值 示例: <?xml version"1.0" encoding"UTF-8" s…

怎么提升品牌知名度,小红书母婴赛道分析

小红书平台自创立之初&#xff0c;便以母婴类内容为特色。今天我们来分享下&#xff0c;怎么提升品牌知名度&#xff0c;小红书母婴赛道分析。 一、妈妈用户仍是主流 我们都知道&#xff0c;小红书平台是一个女性用户为主的平台。根据去年的平台用户调查&#xff0c;可以发现&a…

软件测试面试题

一、描述 TCP/IP 协议的层次结构&#xff0c;以及每一层中重要协议 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;是互联网的核心协议套件&#xff0c;它定义了在网络中进行通信的规则和标准。TCP/IP协议栈按照层次结构划分&#xff0c;每一…

第七章 回溯

目录 一、组合问题1.1 组合1.2 组合总和 III1.3 电话号码的字母组合1.4 组合总和1.5 组合总和 II 二、分割问题2.1 分割回文串2.2 复原 IP 地址 三、子集问题3.1 子集3.2 子集 II3.3 递增子序列 四、排列问题4.1 全排列4.2 全排列 II 五、棋盘问题5.1 N 皇后5.2 解数独 六、其它…

MySQL使用SELECTI...INTO OUTFILE导出表数据

通过对数据表的导入导出&#xff0c;可以实现 MySQL 数据库服务器与其它数据库服务器间移动数据。导出是指将 MySQL 数据表的数据复制到文本文件。数据导出的方式有多种&#xff0c;下面主要介绍使用 SELECTI...INTO OUTFILE 语句导出数据。 在 MySQL 中&#xff0c;可以使用 …

Flowable钉钉对接005-完成钉钉任务

企业中有自己的业务系统&#xff0c;审批都在业务系统中审批&#xff0c;如何结合移动办公的开放平台实现统一审批至关重要。 场景很简单&#xff0c;自己的系统中可以审批&#xff0c;钉钉上也可以审批&#xff0c;使用H5来适配&#xff0c;统一待办任务 统一待办审批 目标&am…