java反射机制之获取类信息的Util

#java反射机制之获取类信息的Util

学习反射期间编写的一个能获取类的信息(包括成员变量,成员方法以及构造函数信息)的Util类。对于java反射操作的关键,获取类类型(Class):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* Created by g-Linlf on 2017/5/28.
**/
public class ClassUtil {
//获取对象的所有信息 成员方法
public static void getMethodsMessage(Object obj) {
// 获取类类型
//String name = obj.getClass().getName();
//System.out.println(name);
//System.out.println(obj.getClass().getSimpleName());
Class tClass = obj.getClass();
//tClass = Class.forName(name);
System.out.println("类名为:" + tClass.getName());
//获取成员方法 ,万事万物接对象 Method类为方法的对象
//Object[] methods = tClass.getMethods();
Method[] methods = tClass.getMethods();//获取到所有public的函数,包括父类继承过来的
//Method[] methods = tClass.getDeclaredMethods();//获取到该类所有自己声明的方法,不论访问权限。
for (Method method : methods) {
//System.out.println(method);
//获得返回值类类型
Class returnType = method.getReturnType();
System.out.print(returnType.getSimpleName() + " ");
//获得方法名
System.out.print(method.getName() + "(");
//获取参数
//获取参数类型
Class[] paramsType = method.getParameterTypes();
//for (Class class1 : paramsType) {
// System.out.print(class1.getName() + ",");
//}
for (int i = 0; i < paramsType.length; i++) {
if (i == paramsType.length - 1) {
System.out.print(paramsType[i].getName());
} else {
System.out.print(paramsType[i].getName() + ",");
}
}
System.out.println(")");
}
}
//获取对象的成员变量
public static void getFieldMessage(Object obj) {
Class tClass = obj.getClass();
/**
* 成员变量也是对象
* Field封装了关于成员变量的操作
*
*/
System.out.println("--------成员变量---------");
//getFields()获取到所有public的成员变量 getDeclaredFields()获取到该类自己声明的成员变量
//Field[] fields = tClass.getFields();
Field[] fields = tClass.getDeclaredFields();
for (Field field : fields) {
//System.out.println(field);
//变量类型
System.out.print(field.getType() + " ");
// 变量名
System.out.println(field.getName());
}
}
//获取对象的构造函数信息(构造函数 也是对象)
public static void getConMessage(Object obj) {
Class tClass = obj.getClass();
/**
* java.lang.Constructor封装了构造函数的信息
* getConstructors() 获取所有public的构造函数
* getDeclaredConstructors() 获取对象定义的构造函数
*/
//Constructor[] cons = tClass.getConstructors();
Constructor[] cons = tClass.getDeclaredConstructors();
for (Constructor con : cons) {
//获取构造函数的名
System.out.print(con.getName() + "(");
//获取构造函数的参数列表
Class[] paramsType = con.getParameterTypes();
for (int i = 0; i < paramsType.length; i++) {
if (i != paramsType.length - 1) {
System.out.print(paramsType[i].getSimpleName() + ",");
} else {
System.out.print(paramsType[i].getSimpleName());
}
System.out.println(")");
}
}
}
public static void main(String args[]) {
//ClassUtil.getMethodsMessage("123");
Integer num = 1;
//ClassUtil.getFieldMessage(num);
ClassUtil.getConMessage(num);
}
}