Class工具类-获取类/成员变量/构造函数

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);
    }

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

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

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

发表评论

邮箱地址不会被公开。 必填项已用*标注