Java反射——获取类的信息

获取类的信息

1
package com.imooc.reflect;
2
3
import java.lang.reflect.Constructor;
4
import java.lang.reflect.Field;
5
import java.lang.reflect.Method;
6
7
public class ClassUtil {
8
	/**
9
	 * 打印类的信息,包括类的成员函数、成员变量(只获取成员函数)
10
	 * @param obj 该对象所属类的信息
11
	 */
12
	public static void printClassMethodMessage(Object obj){
13
		//要获取类的信息  首先要获取类的类类型
14
		Class c = obj.getClass();//传递的是哪个子类的对象  c就是该子类的类类型
15
		//获取类的名称
16
		System.out.println("类的名称是:"+c.getName());
17
		/*
18
		 * Method类,方法对象
19
		 * 一个成员方法就是一个Method对象
20
		 * getMethods()方法获取的是所有的public的函数,包括父类继承而来的
21
		 * getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限
22
		 */
23
		Method[] ms = c.getMethods();//c.getDeclaredMethods()
24
		for(int i = 0; i < ms.length;i++){
25
			//得到方法的返回值类型的类类型
26
			Class returnType = ms[i].getReturnType();
27
			System.out.print(returnType.getName()+" ");
28
			//得到方法的名称
29
			System.out.print(ms[i].getName()+"(");
30
			//获取参数类型--->得到的是参数列表的类型的类类型
31
			Class[] paramTypes = ms[i].getParameterTypes();
32
			for (Class class1 : paramTypes) {
33
				System.out.print(class1.getName()+",");
34
			}
35
			System.out.println(")");
36
		}
37
	}
38
    /**
39
     * 获取成员变量的信息
40
     * @param obj
41
     */
42
	public static void printFieldMessage(Object obj) {
43
		Class c = obj.getClass();
44
		/*
45
		 * 成员变量也是对象
46
		 * java.lang.reflect.Field
47
		 * Field类封装了关于成员变量的操作
48
		 * getFields()方法获取的是所有的public的成员变量的信息
49
		 * getDeclaredFields获取的是该类自己声明的成员变量的信息
50
		 */
51
		//Field[] fs = c.getFields();
52
		Field[] fs = c.getDeclaredFields();
53
		for (Field field : fs) {
54
			//得到成员变量的类型的类类型
55
			Class fieldType = field.getType();
56
			String typeName = fieldType.getName();
57
			//得到成员变量的名称
58
			String fieldName = field.getName();
59
			System.out.println(typeName+" "+fieldName);
60
		}
61
	}
62
	/**
63
	 * 打印对象的构造函数的信息
64
	 * @param obj
65
	 */
66
	public static void printConMessage(Object obj){
67
		Class c = obj.getClass();
68
		/*
69
		 * 构造函数也是对象
70
		 * java.lang. Constructor中封装了构造函数的信息
71
		 * getConstructors获取所有的public的构造函数
72
		 * getDeclaredConstructors得到所有的构造函数
73
		 */
74
		//Constructor[] cs = c.getConstructors();
75
		Constructor[] cs = c.getDeclaredConstructors();
76
		for (Constructor constructor : cs) {
77
			System.out.print(constructor.getName()+"(");
78
			//获取构造函数的参数列表--->得到的是参数列表的类类型
79
			Class[] paramTypes = constructor.getParameterTypes();
80
			for (Class class1 : paramTypes) {
81
				System.out.print(class1.getName()+",");
82
			}
83
			System.out.println(")");
84
		}
85
	}
86
}

参考资料

https://www.imooc.com/learn/199

  • © 2020 QSH
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信