复制代码
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131package Demo2; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassUtil { /** * 打印类的信息,包括类的成员函数 * @param obj */ public static void printClassMethodsMessage(Object obj) { //要获取类的信息 首先要获取类的类类型 Class c = obj.getClass();//传递是那个子类的对象 c就是该子类的类型 //获取类的名称 System.out.println("类的名称是:"+c.getName()); /** * Method类,方法对象 * 一个成员方法就是一个Method对象 * getMethods()方法获取的是所有的public的函数,包括父类继承过来的 * getDeclaredMethods获取的是所有该类自己声明的方法,不问访问权限 */ Method[]ms = c.getMethods();//c.getDeclareMethods()获取方法 System.out.println(c.getName()+"类有"+ms.length+"种方法"); for(int i=0 ;ms.length>i ;i++){ //得到方法的返回值类型 Class returnType = ms[i].getReturnType(); //得到方法的返回值名称 System.out.print(returnType.getName()+" "); //得到方法的名称 System.out.print(ms[i].getName()+"("); //获取参数类型 ---> 得到的是参数列表的类型的类类型 Class[] paramTypes = ms[i].getParameterTypes(); int t=1; for (Class class1:paramTypes) { if (t<paramTypes.length){ System.out.print(class1.getName()+","); }else { System.out.print(class1.getName()); } t++; } System.out.println(");"); } } //获取类的成员变量 public static void printFieldMessage(Object obj){ Class c = obj.getClass(); /** * 成员变量也是对象 * java.lang.reflect.FieldField类封装了关于成员变量的操作 * getFields()方法获取的是所有的public的成员变量 * getDeclareFields获取的是该类自己声明的成员变量的信息 */ Field[] fs = c.getDeclaredFields(); System.out.println("------------------------------------------------------遍历该类的成员变量------------------------------------------------------"); for (Field field:fs){ //得到成员遍历的类型的类类型 Class fieldType = field.getType(); String typeName = fieldType.getTypeName(); //得到成员变量的名称 String fieldName = field.getName(); System.out.println(typeName+" "+fieldName); } } /** * 打印对象的构造函数的信息 * @param obj */ public static void printConMessage(Object obj){ Class c = obj.getClass(); /* *构造函数也是对象 * java.lang.Constructor中封装了构造函数的信息 * getConstructors 获取所有的public的构造函数 * getDeclaredConstructors得到所有的构造函数 * */ //Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor:cs){ System.out.print(constructor.getName()+"("); //获取构造函数的参数列表-->得到的是参数列表的类类型 Class[] paramTypes = constructor.getParameterTypes(); for (int i=0 ;i < paramTypes.length ;i++){ if (i <paramTypes.length-1) { System.out.print(paramTypes[i].getName()+","); }else { System.out.print(paramTypes[i].getName()); } } System.out.println(")"); } } }
最后
以上就是灵巧手链最近收集整理的关于反射之获取的方法与构造方法的全部内容,更多相关反射之获取内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复