1. 程式人生 > >詳解Java中的Object.getClass()方法

詳解Java中的Object.getClass()方法

詳解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基礎知識