Class类:
获取所有方法:
public Method[] getMethods():返回表示此类中公共方法的 Method 对象的数组
public Method[] getDeclaredMethods():表示此类所有声明方法的 Method 对象的数组
获取单个方法:
public Method getMethod(String name, Class<?>... parameterTypes):返回与指定的 name 和 parameterTypes 匹配的 Method 对象
public Method getDeclaredMethod(String name, Class<?>... parameterTypes):与指定名和参数相匹配的方法的 Method 对象
Method类:
setAccessible(boolean flag):设置为true,可以强制访问
public Object invoke(Object obj, Object... args):对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
实例:
public class demo2 {
public static void main(String[] args) throws Exception {
//获取字节码文件对象
Class c = Class.forName("javaReflect.Person");
//获取构造方法
Constructor<Person> con = c.getConstructor(String.class,int.class);
//通过带参构造方法创建对象
Person p = con.newInstance("小林凉子",24);
System.out.println(p); //Person [name=小林凉子, braSize=24]
//获取成员变量name
Field braField = c.getDeclaredField("braSize");
//设置p对象的成员变量name为新值
braField.setAccessible(true);
braField.set(p, 40);
System.out.println(p); //Person [name=小林凉子, braSize=40]
//获取指定方法
Method m1 = c.getMethod("show",boolean.class);
//设置参数值
m1.invoke(p, true);
System.out.println(p);
m1.invoke(p, false);
System.out.println(p);
}
}