首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java反射总结

java反射总结

作者头像
earthchen
发布2020-09-24 15:47:00
发布2020-09-24 15:47:00
47600
代码可运行
举报
文章被收录于专栏:earthchen的专栏earthchen的专栏
运行总次数:0
代码可运行

反射相关总结

获取class对象

  1. 通过对象的getClass()方法
  2. 使用类的静态属性.class
  3. 通过class类的静态方法forName(String name)

一般只使用第三种方式

代码语言:javascript
代码运行次数:0
运行
复制
// 参数为你的完整包路径
Class clazz = Class.forName("com.earthchen.constructors.Student");

获取构造方法

批量获取构造方法

clazz.getConstructors() : 所有”公有的”构造方法

代码语言:javascript
代码运行次数:0
运行
复制
Constructor[] conArray = clazz.getConstructors();

clazz.getDeclaredConstructors() :获取所有的构造方法(包括私有、受保护、默认、公有)

代码语言:javascript
代码运行次数:0
运行
复制
Constructor[] conArray = clazz.getDeclaredConstructors();

获取单个构造方法

clazz.getConstructor(Class… parameterTypes); 获取单个的”公有的”构造方法

代码语言:javascript
代码运行次数:0
运行
复制
//1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型
//2>、返回的是描述这个无参构造函数的类对象。
Constructor con = clazz.getConstructor(null);

clazz.getDeclaredConstructor():获取”某个构造方法”可以是私有的,或受保护、默认、公有

代码语言:javascript
代码运行次数:0
运行
复制
Constructor con = clazz.getDeclaredConstructor(char.class);

调用构造方法

con.newInstance(): 调用构造方法

如果在构造实体时,需要传参数,直接在newInstance()方法中添加相关参数即可

代码语言:javascript
代码运行次数:0
运行
复制
obj=con.newInstance('男')

在访问私有方法时,需要设置允许访问

代码语言:javascript
代码运行次数:0
运行
复制
con.setAccessible(true);

获取成员变量

批量获取成员变量

clazz.getFields() : 所有”公有的”字段

代码语言:javascript
代码运行次数:0
运行
复制
Field[] fieldArray = stuClass.getFields();

clazz.getDeclaredFields() :获取所有的构造方法(包括私有、受保护、默认、公有)

代码语言:javascript
代码运行次数:0
运行
复制
Field[] fieldArray = stuClass.getDeclaredFields();

获取单个成员变量

clazz.getField(String name): 获取某个”公有的”字段

代码语言:javascript
代码运行次数:0
运行
复制
Field f = stuClass.getField("name");

clazz.getDeclaredField(String name):获取某个字段(可以是私有的)

代码语言:javascript
代码运行次数:0
运行
复制
Field f = stuClass.getDeclaredField("phoneNum");

设置字段的值

obj:要设置的字段所在的对象value:要为字段设置的值

代码语言:javascript
代码运行次数:0
运行
复制
f.set(obj, "18888889999");

f.set(Object obj,Object value): 设置字段的值在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有属性时,需要设置允许访问

代码语言:javascript
代码运行次数:0
运行
复制
f.setAccessible(true);

获取成员方法

批量获取方法

clazz.getMethods() : 所有”公有的”方法(包含了父类的方法也包含Object类)

代码语言:javascript
代码运行次数:0
运行
复制
Method[] methodArray = stuClass.getMethods();

clazz.getDeclaredMethods() :获取所有的成员方法,包括私有的(不包括继承的)

代码语言:javascript
代码运行次数:0
运行
复制
Method[] methodArray = stuClass.getDeclaredMethods();

获取单个方法

clazz.getMethod(String name,Class<?>… parameterTypes): 获取某个”公有的”方法

代码语言:javascript
代码运行次数:0
运行
复制
Method m = stuClass.getMethod("show1", String.class);

clazz.getDeclaredMethod(String name,Class<?>… parameterTypes):获取某个方法(可以是私有的)

代码语言:javascript
代码运行次数:0
运行
复制
Method m = stuClass.getDeclaredMethod("show4", int.class);

调用方法

Method –> public Object invoke(Object obj,Object… args): 调用方法obj : 要调用方法的对象;args:调用方式时所传递的实参;

代码语言:javascript
代码运行次数:0
运行
复制
m.invoke(obj, 20);

在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有方法时,需要设置允许访问

代码语言:javascript
代码运行次数:0
运行
复制
m.setAccessible(true);

参考:https://blog.csdn.net/sinat_38259539/article/details/71799078

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-05,,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取class对象
  • 获取构造方法
    • 批量获取构造方法
    • 获取单个构造方法
    • 调用构造方法
  • 获取成员变量
    • 批量获取成员变量
    • 获取单个成员变量
    • 设置字段的值
  • 获取成员方法
    • 批量获取方法
    • 获取单个方法
    • 调用方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档