目录
一、什么是反射?
二、获取Class对象
三、获取构造方法
四、获取成员变量
五、获取成员方法
六、暴力发射
一、什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二、获取Class对象
获取Class类对象
1、使用类的class属性来获取,例:Objectr.class
2、调用对象的getClass()方法,返回该对象所属类的Class对象
3、使用Class类中的静态方法forName(String className) 该传入字符串参数为某个类的全路径,也就是完整包名的路径
4、基本数据类型也可用.class方法获取Class对象的。
三、获取构造方法
获取构造方法的方法
1、 Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组
2、Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组
3、Constructor<?> getConstructor(Class<?>...parameterTypes) 返回单个公共构造方法对象
4、Constructor<?> getDeclaredConstructor(Class<?>...parameterTypes) 返回单个构造方法对象
四、获取成员变量
获取成员变量并使用
1、 Field[] getFields() 返回一个包含Filed对象的数组,Filed对象反映该类所有可访问的公共变量
2、Field[] getDeclaredFields() 返回一个包含Filed对象的数组,反映了该类声明的所有字段
3、 getField(String name) 返回一个可访问的公共字段
4、 getDeclaredField( String name) 返回一个字段
5、 set(Object o, Object value) 给o对象赋值为value
五、获取成员方法
获取成员方法并使用
1、 Method[] getMethods() 返还一个包含方法对象的数组,反映该类对象所有的公共方法,包括由类或接口声明的对象,以及从超类和超级接口继承来的类方法
2、 Method[] getDeclaredMethods() 返还一个包含方法对象的数组,反映该类对象所有声明方法,不包含继承
3、 Method getMethod(String name, Class<?>...parameterTypes) 返回一个声明的公共方法
4、 Method gettDeclaredMethod(String name, Class<?>...parameterTypes) 返回一个声明的方法
5、 Object invoke(Object o,Object...args)在具有指定参数的指定对象上调用此方法对象表示的基础方法
六、暴力反射
暴力反射
setAccessible(boolean flag) 值为true ,取消访问检查
这样就可以使用私有的字段了