java反射总结
反射相关总结
获取class对象
- 通过对象的getClass()方法
- 使用类的静态属性.class
- 通过class类的静态方法forName(String name)
一般只使用第三种方式
// 参数为你的完整包路径
Class clazz = Class.forName("com.earthchen.constructors.Student");
获取构造方法
批量获取构造方法
clazz.getConstructors() : 所有”公有的”构造方法
Constructor[] conArray = clazz.getConstructors();
clazz.getDeclaredConstructors() :获取所有的构造方法(包括私有、受保护、默认、公有)
Constructor[] conArray = clazz.getDeclaredConstructors();
获取单个构造方法
clazz.getConstructor(Class… parameterTypes); 获取单个的”公有的”构造方法
//1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型
//2>、返回的是描述这个无参构造函数的类对象。
Constructor con = clazz.getConstructor(null);
clazz.getDeclaredConstructor():获取”某个构造方法”可以是私有的,或受保护、默认、公有
Constructor con = clazz.getDeclaredConstructor(char.class);
调用构造方法
con.newInstance(): 调用构造方法
如果在构造实体时,需要传参数,直接在newInstance()方法中添加相关参数即可
obj=con.newInstance('男')
在访问私有方法时,需要设置允许访问
con.setAccessible(true);
获取成员变量
批量获取成员变量
clazz.getFields() : 所有”公有的”字段
Field[] fieldArray = stuClass.getFields();
clazz.getDeclaredFields() :获取所有的构造方法(包括私有、受保护、默认、公有)
Field[] fieldArray = stuClass.getDeclaredFields();
获取单个成员变量
clazz.getField(String name): 获取某个”公有的”字段
Field f = stuClass.getField("name");
clazz.getDeclaredField(String name):获取某个字段(可以是私有的)
Field f = stuClass.getDeclaredField("phoneNum");
设置字段的值
obj:要设置的字段所在的对象value:要为字段设置的值
f.set(obj, "18888889999");
f.set(Object obj,Object value): 设置字段的值在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有属性时,需要设置允许访问
f.setAccessible(true);
获取成员方法
批量获取方法
clazz.getMethods() : 所有”公有的”方法(包含了父类的方法也包含Object类)
Method[] methodArray = stuClass.getMethods();
clazz.getDeclaredMethods() :获取所有的成员方法,包括私有的(不包括继承的)
Method[] methodArray = stuClass.getDeclaredMethods();
获取单个方法
clazz.getMethod(String name,Class<?>… parameterTypes): 获取某个”公有的”方法
Method m = stuClass.getMethod("show1", String.class);
clazz.getDeclaredMethod(String name,Class<?>… parameterTypes):获取某个方法(可以是私有的)
Method m = stuClass.getDeclaredMethod("show4", int.class);
调用方法
Method –> public Object invoke(Object obj,Object… args): 调用方法obj : 要调用方法的对象;args:调用方式时所传递的实参;
m.invoke(obj, 20);
在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有方法时,需要设置允许访问
m.setAccessible(true);
参考:https://blog.csdn.net/sinat_38259539/article/details/71799078
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 如何卸载python插件
- Keras实现支持masking的Flatten层代码
- 用opencv给图片换背景色的示例代码
- 解决Keras 自定义层时遇到版本的问题
- Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
- Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
- python实现PDF中表格转化为Excel的方法
- php实现算术验证码功能
- 基于matplotlib中ion()和ioff()的使用详解
- Laravel5.7框架安装与使用学习笔记图文详解
- Python基于httpx模块实现发送请求
- Python Tkinter图形工具使用方法及实例解析
- PHP实现的简单留言板功能示例【基于thinkPHP框架】
- Python SMTP配置参数并发送邮件
- Python如何实现自带HTTP文件传输服务