詳解Java中的Object.getClass()方法
阿新 • • 發佈:2018-11-13
詳解Java中的Object.getClass()方法
詳解Object.getClass()方法,這個方法的返回值是Class型別,Class c = obj.getClass(); 通過物件c,我們可以獲取該物件的所有成員方法,每個成員方法都是一個Method物件;我們也可以獲取該物件的所有成員變數,每個成員變數都是一個Field物件;同樣的,我們也可以獲取該物件的建構函式,建構函式則是一個Constructor物件,具體見下面的例子
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基礎知識