1 package cn.lonecloud.reflect;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Field;
5 import java.lang.reflect.Method;
6
7 import org.junit.Test;
8
9 public class ClassUtil {
10 /**
11 * 获取该类的信息
12 * 比如他的类的类名和函数
13 * @param obj
14 */
15 public static void getClassInfo(Object obj){
16 //获取obj的类类型
17 Class c1=obj.getClass();
18 System.out.println("类的类型为"+c1.getName());
19 System.out.println("类的类型为"+c1.getSimpleName());
20 //获取类的类方法包括其父类的方法
21 Method[] methods=c1.getMethods();
22 System.out.println("该类的方法为");
23 int c=0;
24 for (int i = 0; i < methods.length; i++) {
25 c++;
26 Class returntype=methods[i].getReturnType();//获取该类的返回值
27 System.out.print(returntype.getSimpleName()+" ");//打印返回值
28 System.out.print(methods[i].getName()+"(");//打印方法名
29 Class[] prams=methods[i].getParameterTypes();//获取参数的方法
30 for (int j = 0; j < prams.length; j++) {
31 System.out.print(prams[j].getSimpleName()+" ");//打印参数名
32 }
33 System.out.println(")");
34 }
35 System.out.println("利用getDeclaredMethods");
36 //获取类的本类方法,不包含父类的方法可以获取他的类里面的所有方法
37 Method[] methods1=c1.getDeclaredMethods();
38 System.out.println("该类的方法为");
39 int count=0;
40 for (int i = 0; i < methods1.length; i++) {
41 count++;
42 Class returntype=methods1[i].getReturnType();//获取该类的返回值
43 System.out.print(returntype.getSimpleName()+" ");//打印返回值
44 System.out.print(methods1[i].getName()+"(");//打印方法名
45 Class[] prams=methods1[i].getParameterTypes();//获取参数的方法
46 for (int j = 0; j < prams.length; j++) {
47 System.out.print(prams[j].getSimpleName()+" ");//打印参数名
48 }
49 System.out.println(")");
50 }
51 System.out.println(c+" "+count);
52 }
53 /**
54 * 获取构造方法
55 * @param obj
56 */
57 public void getConMethod(Object obj){
58 Class c=obj.getClass();
59 //获取类的构造方法
60 Constructor[] declaredConstructors = c.getDeclaredConstructors();
61 for (Constructor constructor : declaredConstructors) {
62 System.out.print(constructor.getName()+"(");
63 Class[] parameterTypes = constructor.getParameterTypes();
64 for (Class class1 : parameterTypes) {
65 System.out.print(class1.getName());
66 }
67 }
68 System.out.println(")");
69 }
70 public void getClassFields(Object obj) {
71 Class c=obj.getClass();
72 //获取该类的成员变量
73 Field[] declaredFields = c.getDeclaredFields();
74 for (Field field : declaredFields) {
75 //获取成员变量的类型
76 System.out.print(field.getType().getName()+" ");
77 //获取成员变量的名称
78 System.out.println(field.getName());
79 }
80 }
81 public void runClassMethod(Object obj) throws Exception{
82 Class c1=obj.getClass();//获取类类型
83 /*
84 * c1.getDeclaredMethod("syso", parameterTypes)
85 * 第一个是方法名,第二个为参数
86 */
87 Method m1=c1.getDeclaredMethod("de");
88 m1.setAccessible(true);//设置这个方法的权限为public但是不会改变该方法的原有的权限
89 /*
90 * invoke(obj)对于指定的方法执行第一参数为这个对象,第二个为函数参数
91 */
92 System.out.println(m1.invoke(obj));
93 }
94 @Test
95 public void test() throws Exception{
96 // String s="cewc";
97 // getClassInfo(s);
98 word w=new word();
99 getClassInfo(w);
100 getConMethod(w);
101 getClassFields(w);
102 runClassMethod(w);
103 }
104 }
package
cn.lonecloud.reflect;
import
java.lang.reflect.Constructor;
import
java.lang.reflect.Field;
import
java.lang.reflect.Method;
import
org.junit.Test;
public
class
ClassUtil {
/**
* 获取该类的信息
* 比如他的类的类名和函数
* @param obj
*/
public
static
void
getClassInfo(Object obj){
Class c1=obj.getClass();
System.out.println(
"类的类型为"
+c1.getName());
System.out.println(
"类的类型为"
+c1.getSimpleName());
Method[] methods=c1.getMethods();
System.out.println(
"该类的方法为"
);
int
c=
0
;
for
(
int
i =
0
; i < methods.length; i++) {
c++;
Class returntype=methods[i].getReturnType();
System.out.print(returntype.getSimpleName()+
" "
);
System.out.print(methods[i].getName()+
"("
);
Class[] prams=methods[i].getParameterTypes();
for
(
int
j =
0
; j < prams.length; j++) {
System.out.print(prams[j].getSimpleName()+
" "
);
}
System.out.println(
")"
);
}
System.out.println(
"利用getDeclaredMethods"
);
Method[] methods1=c1.getDeclaredMethods();
System.out.println(
"该类的方法为"
);
int
count=
0
;
for
(
int
i =
0
; i < methods1.length; i++) {
count++;
Class returntype=methods1[i].getReturnType();
System.out.print(returntype.getSimpleName()+
" "
);
System.out.print(methods1[i].getName()+
"("
);
Class[] prams=methods1[i].getParameterTypes();
for
(
int
j =
0
; j < prams.length; j++) {
System.out.print(prams[j].getSimpleName()+
" "
);
}
System.out.println(
")"
);
}
System.out.println(c+
" "
+count);
}
/**
* 获取构造方法
* @param obj
*/
public
void
getConMethod(Object obj){
Class c=obj.getClass();
Constructor[] declaredConstructors = c.getDeclaredConstructors();
for
(Constructor constructor : declaredConstructors) {
System.out.print(constructor.getName()+
"("
);
Class[] parameterTypes = constructor.getParameterTypes();
for
(Class class1 : parameterTypes) {
System.out.print(class1.getName());
}
}
System.out.println(
")"
);
}
public
void
getClassFields(Object obj) {
Class c=obj.getClass();
Field[] declaredFields = c.getDeclaredFields();
for
(Field field : declaredFields) {
System.out.print(field.getType().getName()+
" "
);
System.out.println(field.getName());
}
}
public
void
runClassMethod(Object obj)
throws
Exception{
Class c1=obj.getClass();
Method m1=c1.getDeclaredMethod(
"de"
);
m1.setAccessible(
true
);
System.out.println(m1.invoke(obj));
}
@Test
public
void
test()
throws
Exception{
word w=
new
word();
getClassInfo(w);
getConMethod(w);
getClassFields(w);
runClassMethod(w);
}
}