反射
获得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, 方法的值) ;