JavaSE-反射

反射

获得Class的方式

(1)通过对象调用getClass()方法(使用少)

Student student = new Student;
Class class = student.getClass();

(2)直接通过类名.class

Class class = Student.class;

(3)通过Class对象的forName()静态方法(使用多)

Class class = Class.forName("com.Student.util.Student");

一、获得和使用构造方法

Constructor<T> getDeclaredConstructor(<?>... parameterTypes)  #返回一个 Constructor对象反映指定的构造函数的类或接口的 类对象表示
Constructor<?>[] getDeclaredConstructors()  #返回 Constructor物体反射所有的构造函数通过 类对象表示的类中声明一个数组
Constructor<T> getConstructor(<?>... parameterTypes)  #返回一个 Constructor对象反映指定的公共构造函数的 类对象表示的类
Constructor<?>[] getConstructors()  #返回一个数组包含 Constructor物体反射所有的 类对象表示的类的公共构造函数
T newInstance()  #创建这个 类对象表示的类的一个新实例
Constructor[] constructor = class.getConstructor(数据类型.class);
//针对构造方法是私有的情况
constructor.setAccessible = true;
Object object = constructor.newInstance(参数的值);

二、获得和使用成员变量

Field getDeclaredField(String name)  #返回 Field物体反射所有字段的类或接口的 类对象表示声明数组
Field[] getDeclaredFields()  #返回 Field物体反射所有字段的类或接口的 类对象表示声明数组
Field getField(String name)  #返回一个 Field对象反映的类或接口的 类对象表示的指定公共成员
Field[] getFields()  #返回一个数组包含 Field物体反射的类或接口的 类对象代表所有可访问的公共领域
Field field = class.getDeclaredField(参数);
//针对构造方法是私有的情况
field.setAccessible(true);
//创建对象
Object object = class.getDeclaredConstructor().newInstance();
field.set(object, 参数的值);

三、获得和使用成员方法

方法 getDeclaredMethod(String name,<?>... parameterTypes)  #返回一个对象,反映了 Field指定声明字段的类或接口的 类对象表示
方法[] getDeclaredMethods()  #返回一个数组包含 方法物体反射所有声明的方法的类或接口的 类对象,代表包括公众、保护,默认(包)的访问,和私有方法,但不包括继承的方法
方法 getMethod(String name,<?>... parameterTypes)  #返回一个 方法对象反映的类或接口的 类对象表示的指定公共成员方法
方法[] getMethods()  #返回一个数组包含 方法物体反射所有的类或接口的 类对象表示的公共方法,包括那些由类或接口的超类和超接口继承的声明
Method method = class.getMethod(方法名, 方法的值);
//创建对象
Object object = class.getDeclaredConstructor().newInstance();
method.invoke(object, 方法的值);

猜你喜欢

转载自blog.csdn.net/JavaDestiny/article/details/86484561