美文网首页
java 反射学习笔记(四)反射的基本操作和用法

java 反射学习笔记(四)反射的基本操作和用法

作者: 夕决_ | 来源:发表于2019-11-17 20:16 被阅读0次

    反射的基本操作和用法:

    通过反射获取该类的属性;
    通过反射获取该类的方法;
    通过反射获取该类的构造方法;

    在通过反射获取到该类的类类型以后,下一步就是对其方法和属性进行获取等操作了。

    首先创建一个ClassUtil

    public class ClassUtil {}
    

    添加方法,打印类的方法信息:

    /**
         * 打印类的方法
         * @param
         */
        public static void printMethodsMessage(Object obj){
    
            // 要获取类的信息  首先要获取类的类类型 class type
            Class c = obj.getClass();
    
            // 获取类的名称
            System.out.println("类的名称是: " + c.getSimpleName());
    
            /**
             * getMethods() 获取类的所有的 public的函数  包括父类继承而来的
             * getDeclaredMethods() 获取的是所有该类自己声明的方法,不论访问权限
             */
            Method[] methods = c.getMethods();
            for (int i = 0; i < methods.length; i++) {
                // 得到方法的返回值类型的类类型
                Class returnType = methods[i].getReturnType();
                System.out.print(returnType.getName()+" ");
                // 获取方法名
                System.out.print(methods[i].getName() + "( ");
    
                // 获取参数类型
                Class[] paramTppes = methods[i].getParameterTypes();
                for (Class paramTppe : paramTppes) {
                    System.out.print(paramTppe.getName()+", ");
                }
                System.out.print(")");
                System.out.println("\n");
            }
            
        }
    

    添加方法,打印类的属性信息:

     /**
         * 获取成员变量
         * getDeclaredFields 自己声明的
         * @param c
         */
        private static void getFieldsMessage(Class c) {
            /**
             * 成员变量也是对象
             * Filed类封装了关于成员变量的操作
             * getFields() 方法获取的是所有的 public的成员变量的信息
             * getDeclaredFields() 获取的是自己声明的成员变量的信息
             */
    
            Field[] fields = c.getDeclaredFields();
            for (Field field : fields) {
                // 得到成员变量类型的类类型
                Class fieldType= field.getType();
                String typeName= fieldType.getName();
                // 得到成员变量的名称
                String fieldNAme = field.getName();
                System.out.println(typeName + " "+fieldNAme);
            }
        }
    

    打印对象构造函数的信息:

     /**
         * 打印对象构造函数的信息
         *
         * @param obj
         */
        public static void printConMessage(Object obj){
            Class c = obj.getClass();
    
            /**
             * 构造函数也是对象
             * java.lang.reflect.Constructor
             * getDeclaredConstructors 获取所有的构造函数
             *
             */
    
            Constructor[] cs = c.getDeclaredConstructors();
            for (Constructor constructor : cs) {
                System.out.print(constructor.getName()+ "(");
    
                // 获取构造函数的参数列表 --> 得到的是参数的=列表的类类型
                Class[] paramTypes = constructor.getParameterTypes();
                for (Class paramType : paramTypes) {
                    System.out.print(paramType.getName()+",");
                }
                System.out.print(")\n");
            }
    
        }
    

    文章链接:
    Java 反射学习笔记(一)认识Class
    java 反射学习笔记(二)方法的反射
    java 反射学习笔记(三)通过反射机制,绕过编译时泛型检测
    java 反射学习笔记(四)反射的基本操作和用法

    相关文章

      网友评论

          本文标题:java 反射学习笔记(四)反射的基本操作和用法

          本文链接:https://www.haomeiwen.com/subject/gnhmictx.html