[Java反射基礎二]獲取類的信息

 

本文接上文「Class類的使用」,以編寫一個用來獲取類的信息(成員函數、成員變量、構造函數)的工具類來說解"反射之獲取類的信息"html

一、獲取成員函數信息java

 1 /**
 2  * 獲取成員函數信息
 3  * @param obj
 4  */
 5 public static void printClassMethodMessage(Object obj){
 6     //獲取類的信息   獲取類的類類型
 7     Class c = obj.getClass();
 8     //獲取類的名稱
 9     System.out.println("類的名稱是:" + c.getName());
10     /**
11      * Methods類,方法對象
12      * 一個成員方法就是一個Method對象
13      * getMethods()方法是獲取全部public的函數,包括父類繼承而來
14      * getDeclaredMethods()獲取的是全部該類本身聲明的方法,不問訪問權限
15      */
16 //  Method [] ms = c.getMethods();
17     Method [] ms = c.getDeclaredMethods();
18     for (Method m : ms) {
19         //獲得方法返回值的類類型
20         Class returnType = m.getReturnType();
21         System.out.print(returnType.getName() + " ");
22         //獲得方法名稱
23         System.out.print(m.getName() + "(");
24         //獲取參數類型(獲得的是參數列表的類型的類類型)
25         Class[] paramTypes = m.getParameterTypes();
26         for (Class paramType : paramTypes) {
27             System.out.print(paramType.getName()+",");
28         }
29         System.out.println(")");
30     }
31 }

二、獲取成員變量信息ide

 1 /**
 2  * 獲取成員變量信息
 3  * @param obj
 4  */
 5 public static void printClassFieldMessage(Object obj) {
 6     Class c = obj.getClass();
 7     /**
 8      * 成員變量也是對象
 9      * Field類封裝了關於成員變量的操做
10      * getFields()獲取的是全部的public的成員變量信息
11      * getDeclaredFields()獲取的是該類本身聲明的成員變量信息
12      */
13 //        Field [] fs = c.getFields();
14     Field[] fs = c.getDeclaredFields();
15     for (Field f : fs) {
16         //獲得成員變量的類型的類類型
17         Class fieldType = f.getType();
18         String typeName = fieldType.getName();
19         //獲得成員變量的名稱
20         String fieldName = f.getName();
21         System.out.println(typeName+" "+fieldName);
22     }
23 }

三、獲取構造函數信息函數

 1 public static void printConMessage(Object obj){
 2     Class c = obj.getClass();
 3     /**
 4      * 構造函數也是對象
 5      * java.lang.Constructor封裝了構造函數的信息
 6      * getConstructors()獲取全部的public構造函數
 7      * getDeclaredConstructors()獲取全部的構造函數
 8      */
 9 //        Constructor[] cs = c.getConstructors();
10     Constructor[] cs = c.getDeclaredConstructors();
11     for (Constructor constructor : cs) {
12         System.out.print(constructor.getName()+"(");
13         //獲取構造函數的參數列表,獲得的是參數列表的類類型
14         Class[] paramTypes = constructor.getParameterTypes();
15         for (Class paramType : paramTypes) {
16             System.out.print(paramType.getName()+",");
17         }
18         System.out.println(")");
19     }
20 }

四、工具類代碼工具

 1 package com.format.util;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 /**
 8  * 打印類的信息,成員函數、成員變量
 9  * Created by Format on 2017/6/3.
10  */
11 public class ClassUtil {
12 
13     /**
14      * 獲取成員函數信息
15      * @param obj
16      */
17     public static void printClassMethodMessage(Object obj){
18         //獲取類的信息   獲取類的類類型
19         Class c = obj.getClass();
20         //獲取類的名稱
21         System.out.println("類的名稱是:" + c.getName());
22         /**
23          * Methods類,方法對象
24          * 一個成員方法就是一個Method對象
25          * getMethods()方法是獲取全部public的函數,包括父類繼承而來
26          * getDeclaredMethods()獲取的是全部該類本身聲明的方法,不問訪問權限
27          */
28 //        Method [] ms = c.getMethods();
29         Method [] ms = c.getDeclaredMethods();
30         for (Method m : ms) {
31             //獲得方法返回值的類類型
32             Class returnType = m.getReturnType();
33             System.out.print(returnType.getName() + " ");
34             //獲得方法名稱
35             System.out.print(m.getName() + "(");
36             //獲取參數類型(獲得的是參數列表的類型的類類型)
37             Class[] paramTypes = m.getParameterTypes();
38             for (Class paramType : paramTypes) {
39                 System.out.print(paramType.getName()+",");
40             }
41             System.out.println(")");
42         }
43     }
44 
45     /**
46      * 獲取成員變量信息
47      * @param obj
48      */
49     public static void printClassFieldMessage(Object obj) {
50         Class c = obj.getClass();
51         /**
52          * 成員變量也是對象
53          * Field類封裝了關於成員變量的操做
54          * getFields()獲取的是全部的public的成員變量信息
55          * getDeclaredFields()獲取的是該類本身聲明的成員變量信息
56          */
57 //        Field [] fs = c.getFields();
58         Field[] fs = c.getDeclaredFields();
59         for (Field f : fs) {
60             //獲得成員變量的類型的類類型
61             Class fieldType = f.getType();
62             String typeName = fieldType.getName();
63             //獲得成員變量的名稱
64             String fieldName = f.getName();
65             System.out.println(typeName+" "+fieldName);
66         }
67     }
68 
69     /**
70      * 獲取構造函數信息
71      * @param obj
72      */
73     public static void printConMessage(Object obj){
74         Class c = obj.getClass();
75         /**
76          * 構造函數也是對象
77          * java.lang.Constructor封裝了構造函數的信息
78          * getConstructors()獲取全部的public構造函數
79          * 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 paramType : paramTypes) {
88                 System.out.print(paramType.getName()+",");
89             }
90             System.out.println(")");
91         }
92     }
93 
94 }
View Code
相關文章
相關標籤/搜索