java反射机制之获取类信息的Util 发表于 2017-05-28 | 分类于 java | 0 comments #java反射机制之获取类信息的Util 学习反射期间编写的一个能获取类的信息(包括成员变量,成员方法以及构造函数信息)的Util类。对于java反射操作的关键,获取类类型(Class):123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103/** * Created by g-Linlf on 2017/5/28. **/public class ClassUtil { //获取对象的所有信息 成员方法 public static void getMethodsMessage(Object obj) { // 获取类类型 //String name = obj.getClass().getName(); //System.out.println(name); //System.out.println(obj.getClass().getSimpleName()); Class tClass = obj.getClass(); //tClass = Class.forName(name); System.out.println("类名为:" + tClass.getName()); //获取成员方法 ,万事万物接对象 Method类为方法的对象 //Object[] methods = tClass.getMethods(); Method[] methods = tClass.getMethods();//获取到所有public的函数,包括父类继承过来的 //Method[] methods = tClass.getDeclaredMethods();//获取到该类所有自己声明的方法,不论访问权限。 for (Method method : methods) { //System.out.println(method); //获得返回值类类型 Class returnType = method.getReturnType(); System.out.print(returnType.getSimpleName() + " "); //获得方法名 System.out.print(method.getName() + "("); //获取参数 //获取参数类型 Class[] paramsType = method.getParameterTypes(); //for (Class class1 : paramsType) { // System.out.print(class1.getName() + ","); //} for (int i = 0; i < paramsType.length; i++) { if (i == paramsType.length - 1) { System.out.print(paramsType[i].getName()); } else { System.out.print(paramsType[i].getName() + ","); } } System.out.println(")"); } } //获取对象的成员变量 public static void getFieldMessage(Object obj) { Class tClass = obj.getClass(); /** * 成员变量也是对象 * Field封装了关于成员变量的操作 * */ System.out.println("--------成员变量---------"); //getFields()获取到所有public的成员变量 getDeclaredFields()获取到该类自己声明的成员变量 //Field[] fields = tClass.getFields(); Field[] fields = tClass.getDeclaredFields(); for (Field field : fields) { //System.out.println(field); //变量类型 System.out.print(field.getType() + " "); // 变量名 System.out.println(field.getName()); } } //获取对象的构造函数信息(构造函数 也是对象) public static void getConMessage(Object obj) { Class tClass = obj.getClass(); /** * java.lang.Constructor封装了构造函数的信息 * getConstructors() 获取所有public的构造函数 * getDeclaredConstructors() 获取对象定义的构造函数 */ //Constructor[] cons = tClass.getConstructors(); Constructor[] cons = tClass.getDeclaredConstructors(); for (Constructor con : cons) { //获取构造函数的名 System.out.print(con.getName() + "("); //获取构造函数的参数列表 Class[] paramsType = con.getParameterTypes(); for (int i = 0; i < paramsType.length; i++) { if (i != paramsType.length - 1) { System.out.print(paramsType[i].getSimpleName() + ","); } else { System.out.print(paramsType[i].getSimpleName()); } System.out.println(")"); } } } public static void main(String args[]) { //ClassUtil.getMethodsMessage("123"); Integer num = 1; //ClassUtil.getFieldMessage(num); ClassUtil.getConMessage(num); }}