成员变量
获取指定的单个成员变量
可以通过,指定成员变量的变量名,从Class对象对应的类中,获取指定名称的public成员变量(Field对象表示),
还可以获取到父类中定义的同名public成员变量(子类中)
Field getField(String name)
Class sonClass = Son.class;
Field i = sonClass.getField("i");
注:该方法,在类中查找指定名称的public的成员变量时,顺序是 先子类,如果子类中没有,再在父类中找;
如果子类,父类中都没找到指定名称的,成员变量,此时抛出异常NoSuchFieldException
在Class对象表示的类中,获取任意权限的指定名称的成员变量(不包括父类中定义的成员变量)
Field getDeclaredField(String name)
//获取类中定义的private成员变量
Field name = sonClass.getDeclaredField("name");
使用获取到的成员变量: Object get(Object obj)
利用反射,可以做到访问对象的私有成员变量
Son sonObj = new Son("张三");
//首先获取Son类中定义的name成员变量
Field name = sonClass.getDeclaredField("name");
//破解权限问题
name.setAccessible(true); //张三
//在指定对象上获取该成员变量的值
String o = (String) name.get(sonObj);//此处静态变量get.(null)
System.out.println(o);
设置成员变量的值:void set(Object obj, Object newValue)
Son son = new Son(false);
Field k = sonClass.getDeclaredField("k");
k.setAccessible(true);
k.set(son, true);//静态变量set(null, true)
成员方法
获取多个成员方法
Method[] getMethods()
获取当前Class对象表示类中的public成员方法, 也可以获取到当前类的父类中定义的public成员方法
Class clz = MethodClass.class;
Method[] methods = clz.getMethods();
Method[] getDeclaredMethods()
获取当前Class对象表示类中所有的成员方法(但是不包括父类中定义的)
Method[] declaredMethods = clz.getDeclaredMethods();
获取单个成员方法
通过指定 方法名 + 参数列表
String name 指定方法的名称
Class... parameterTypes 指定方法的,形参列表
Class clz = MethodClass.class;
Method getMethod(String name, Class... parameterTypes)
可以获取当前类及其父类中定义的public方法
Method publicMethod = clz.getMethod("publicMethod", int.class, String.class);//双参方法
Method getDeclaredMethod(String name, Class... parameterTypes)
只能获取当前类中定义的任意访问权限的方法(不包括父类中定义的方法)
Method privateMethod = clz.getDeclaredMethod("privateMethod");
//0参方法
通过反射获取到的方法的使用:Object invoke(Object obj, Object… args)
就是在指定对象上,传递实际参数,并调用该方法
Method对象.invoke(指定对象,方法运行所需要的实际参数)//静态方法没有指定对象,输入null
Method secondPrivate = clz.getDeclaredMethod("secondPrivate", int.class, String.class);
secondPrivate.setAccessible(true);
int result = (int) secondPrivate.invoke(methodObj, 10, "张三");