Java反射(2)对象方法及参数的获取
首先创建一个工具类,里面包含两个字段,以及封装好的静态工具方法,通过调用这个静态方法,可以获取传入对象的方法信息,打印在控制台。
运行效果:
import java.lang.reflect.Method;
public class ClassUtil {
private int id;
private String name;
public ClassUtil() {
}
public ClassUtil(int id, String name) {
this.id = id;
this.name = name;
}
public String getResult_1() {
System.out.println("这是一个Public方法");
return "这是一个Public方法";
}
private void getResult_2() {
System.out.println("这是一个Private方法");
}
/**
* 以上是模拟一个普通的类 下面的方法可以作为一个工具类使用
*/
public static void getClassInfo(Object object) {
//获取传入对象的类类型
Class obj_class = object.getClass();
System.out.println("类名字:" + obj_class.getName());
//getMethods() 获取public方法数组 包括从父类继承的方法
//obj_class.getDeclaredMethods()这个方法是获取声明的方法数组 无论是什么访问权限
Method[] methods = obj_class.getMethods();
//遍历方法数组
for (int i = 0; i < methods.length; i++) {
//getReturnType() 返回的是 返回值类的class 所以还应该加上getName()
System.out.print("方法名:" + methods[i].getName() + " 返回值类型:" + methods[i].getReturnType().getName());
//获取某个方法的所有参数
Class[] cls = methods[i].getParameterTypes();
if (cls.length != 0) {
for (int j = 0; j < cls.length; j++) {
System.out.println(" 方法的参数:" + cls[j].getName());
}
} else {
System.out.println(" ***该方法无参数");
}
}
}
}
/**
* 通过反射获取对象的方法以及参数
*/
public class Main {
public static void main(String[] args) {
Class c1 = String.class;
System.out.println(c1.getName());
System.out.println(c1.getSimpleName());
ClassUtil classUtil = new ClassUtil(1, "Name");
ClassUtil.getClassInfo(classUtil);
}
}