public class ClassUtil {
/**
* @Author: www.itze.cn
* @Date: 2020/9/17 16:08
* @Email: 814565718@qq.com
* 打印类的信息,包括类的成员函数,变量
* @param object 该对象所属类的信息
*/
public static void printClassMessage(Object object) {
//获取类的信息,首先获取类的类类型
//参数传递的是什么类型的对象,objectClass就是什么类型
Class<?> objectClass = object.getClass();
//获取类的名称
System.out.println("类的名称:" + objectClass.getName());
/**
* Method类
* 一个成员方法就是一个Method对象
* getMethods();获取的是所有public函数的对象,包括继承的父类的
* getDeclaredMethods();获取的是所有自己声明的方法,所有权限的
*/
Method[] methods = objectClass.getMethods();
Method[] declaredMethods = objectClass.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
//得到返回值类型的类类型
Class<?> returnType = methods[i].getReturnType();
System.out.print("方法返回类型:" + returnType.getName() + " ");
//得到方法名称
System.out.println("方法名称:"+methods[i].getName()+"()");
//获取参数类型---得到的是参数列表的类型的类类型[int.class,String.class]
Class<?>[] parameterTypes = methods[i].getParameterTypes();
for (Class<?> param:parameterTypes
) {
System.out.println("参数类型:"+param.getName());
}
}
/**
* 成员变量也是对象
* java.lang.reflect.Field
* Field封装了关于成员变量的操作
* getFields()获取的是所有public的成员变量信息
* getDeclaredFields获取的是该类自己声明的成员变量信息
*/
Field[] declaredFields = objectClass.getDeclaredFields();
for (Field field : declaredFields
) {
//得到成员变量的类型的类类型
Class<?> type = field.getType();
String typeName = type.getName();
//得到成员变量的名称
String fieldName = field.getName();
System.out.println("成员变量类型:" + typeName + " 成员变量值:" + fieldName);
}
}
/**
* 获取构造函数信息
* 调用方法类名.方法名
* @param object
*/
public static void printConMessage(Object object) {
Class<?> objectClass = object.getClass();
/**
* 构造函数也是对象
* java.lang.Constructor中封装了函数信息
* getDeclaredConstructors()获取自己生成的构造函数
*/
Constructor<?>[] declaredConstructors = objectClass.getDeclaredConstructors();
for (Constructor con : declaredConstructors
) {
System.out.print(con.getName() + "(");
//获取构造函数的参数列表,得到的是参数列表的类类型
Class[] parameterTypes = con.getParameterTypes();
for (Class par : parameterTypes
) {
System.out.print(par.getName() + ",");
}
System.out.println(")");
}
}
}

使用方法

public static void main(String[] args) {
//任何类型的可以
String str = "hello";
ClassUtil.printClassMessage(str);
}

获取类的信息结果部分截图

获取成员变量输出结果截图

获取构造函数输出结果截图