1 package classTest; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 7 /** 8 * 打印类的信息,包括类的构造函数,成员函数,成员变量 9 * @author Wang 10 * 11 */ 12 public class ClassUtil { 13 14 /** 15 * 获取对象的成员方法的信息 16 * 17 * @param obj 18 */ 19 public static void printClassMethodMessage(Object obj) { 20 // 要获取类的信息 首先要获取类的类类型,传递的是哪个子类的对象 c就是该子类的类类型 21 Class c = obj.getClass(); 22 // 获取类的名称 23 System.out.println("类的名称是:" + c.getName()); 24 /* 25 * Method类,方法对象 一个成员方法就是一个Method对象 26 * getMethods()方法获取的是所有的public的函数,包括父类继承而来的 27 * getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限 28 */ 29 // c.getDeclaredMethods() 30 Method[] ms = c.getMethods(); 31 for (int i = 0; i < ms.length; i++) { 32 // 得到方法的返回值类型的类类型 33 Class returnType = ms[i].getReturnType(); 34 System.out.print(returnType.getName() + " "); 35 // 得到方法的名称 36 System.out.print(ms[i].getName() + "("); 37 // 获取参数类型--->得到的是参数列表的类型的类类型 38 Class[] paramTypes = ms[i].getParameterTypes(); 39 for (Class class1 : paramTypes) { 40 System.out.print(class1.getName() + ","); 41 } 42 System.out.println(")"); 43 } 44 } 45 46 /** 47 * 获取对象的成员变量的信息 48 * 49 * @param obj 50 */ 51 public static void printFieldMessage(Object obj) { 52 Class c = obj.getClass(); 53 /* 54 * 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作 55 * getFields()方法获取的是所有的public的成员变量的信息 56 * getDeclaredFields获取的是该类自己声明的成员变量的信息 57 */ 58 // Field[] fs = c.getFields(); 59 Field[] fs = c.getDeclaredFields(); 60 for (Field field : fs) { 61 // 得到成员变量的类型的类类型 62 Class fieldType = field.getType(); 63 String typeName = fieldType.getName(); 64 // 得到成员变量的名称 65 String fieldName = field.getName(); 66 System.out.println(typeName + " " + fieldName); 67 } 68 } 69 70 /** 71 * 打印对象的构造函数的信息 72 * 73 * @param obj 74 */ 75 public static void printConMessage(Object obj) { 76 Class c = obj.getClass(); 77 /* 78 * 构造函数也是对象 java.lang. Constructor中封装了构造函数的信息 79 * getConstructors获取所有的public的构造函数 getDeclaredConstructors得到所有的构造函数 80 */ 81 // Constructor[] cs = c.getConstructors(); 82 Constructor[] cs = c.getDeclaredConstructors(); 83 for (Constructor constructor : cs) { 84 System.out.print(constructor.getName() + "("); 85 // 获取构造函数的参数列表--->得到的是参数列表的类类型 86 Class[] paramTypes = constructor.getParameterTypes(); 87 for (Class class1 : paramTypes) { 88 System.out.print(class1.getName() + ","); 89 } 90 System.out.println(")"); 91 } 92 } 93 }