1. 程式人生 > >通過Java對象來遍歷成員方法,成員變量,構造函數

通過Java對象來遍歷成員方法,成員變量,構造函數

return pri typename static spa tde log 繼承 red

 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 }

通過Java對象來遍歷成員方法,成員變量,構造函數