反射之获取并操作成员方法
package demo.reflect;
public class ReflectTarget extends ReflectTargetOrigin{
ReflectTarget(String str) {
System.out.println("(默认)的构造方法s = " + str);
}
public ReflectTarget(){
System.out.println("调用了公有的无参沟槽函数。。。");
}
public ReflectTarget(char name){
System.out.println("调用了带有一个参数的构造方法,参数值为"+ name);
}
public ReflectTarget(String name,int index){
System.out.println("调用了带有多个参数的构造方法,参数值为【目标名】:"+name+"【序号】"+index);
}
protected ReflectTarget(boolean n){
System.out.println("受保护的构造方法n:"+n);
}
private ReflectTarget(int index){
System.out.println("私有的构造方法序号:"+index);
}
public String name;
protected int index;
char type;
private String targetInfo;
@Override
public String toString(){
return name + "index=" + index + "type=" + type
+ "targetInfo=" + targetInfo + "]";
}
public void show1(String s){
System.out.println("调用了公有的,String参数的show1():s = " + s);
}
protected void show2(){
System.out.println("调用了受保护的,无参的show2()");
}
void show3(){
System.out.println("调用了默认,无参的show3()");
}
private String show4(int index){
System.out.println("调用了私有的,并且有返回值的,int参数的show4():index =" + index);
return "show4result";
}
public static void main(String[] args) throws ClassNotFoundException {
ReflectTarget reflectTarget = new ReflectTarget();
Class reflectTargetClass1 = reflectTarget.getClass();
System.out.println("1st: " + reflectTargetClass1.getName());
Class reflectTargetClass2 = ReflectTarget.class;
System.out.println("2nd: " + reflectTargetClass2.getName());
System.out.println(reflectTargetClass1 == reflectTargetClass2);
Class reflectTargetClass3 = Class.forName("demo.reflect.ReflectTarget");
System.out.println("3rd: " + reflectTargetClass3.getName());
System.out.println(reflectTargetClass2 == reflectTargetClass3);
}
}
package demo.reflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MethodCollector {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class reflectTargetClass = Class.forName("demo.reflect.ReflectTarget");
System.out.println("*****************获取所有的public方法,包括父类和Object******************");
Method[] methodArray = reflectTargetClass.getMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("*******************获取所有的方法,包括私有的*********************");
methodArray = reflectTargetClass.getDeclaredMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("******************获取公有的show1()方法********************");
Method m = reflectTargetClass.getMethod("show1",String.class);
System.out.println(m);
ReflectTarget reflectTarget = (ReflectTarget) reflectTargetClass.getConstructor().newInstance();
m.invoke(reflectTarget,"待反射方法一号");
System.out.println("**************获取私有的show4()方法**************");
m = reflectTargetClass.getDeclaredMethod("show4",int.class);
System.out.println(m);
m.setAccessible(true);
String result = String.valueOf(m.invoke(reflectTarget,20));
System.out.println("返回值:"+result);
}
}