前面已经介绍,通过反射获取Class中各种元素
看之前一定要看链接里获取Class对应信息,因为有很多混淆的获取方法
本篇是简单介绍通过
Constructor(构造器)创建对象
Method(方法)调用方法
Field(字段)操作成员变量
Array(数组)类动态创建、操作数组
一.Constructor创建对象
创建对象很简单
获取到Class clazz对象之后
通过clazz.getConstructor(Class<?>...parameterTypes) 获取Constructor对象
调用Constructor对象的newInstance()即可获得该类的实例
1.注意如果是指定参数的构造器 将指定参数的Class传入即可
2.私有化的构造器无法访问的情况下,可以调用Constructor对象的setAccessible(true) 表示取消访问权限检查
二.Method调用方法
获取clazz之后
通过clazz.getMethod(String methodName,Class<?>...parameterTypes) 获取指定的Method对象
Method对象包含一个 Object invoke(Object obj,Object... args)方法
其中第一个obj 表示具体调用该方法的对象 的实例
第二个args表示具体调用该方法需要传的实际参数
注意:私有化方法的问题按照 Constructor的处理办法一样即可
三.Field操作成员变量
通过clazz.getField(String fieldName)获取指定的Field对象
Field有两组方法操作成员变量
1.Xxx getXxx(Object obj) Xxx表示八种基本数据类型 / Object get() 表示不指定类型 返回Object对象
obj 表示从哪个对象来获取字段的值
2.setXxx(Object obj,Xxx value) Xxx同样表示基本数据类型 / set(Object obj,Object value) 表示不指定value类型