zoukankan      html  css  js  c++  java
  • Java反射

    JAVA反射机制:是在运行状态中,能够获得这个类的所有属性和方法,都能够调用它的任意一个方法和属性,这种动态获取类的信息以及动态调用对象的方法的功能称为反射机制。

    下面将通过反射获取类的信息

    person类

    public class PersonBean {
    
        private String Name;
        private int age;
        private double price;
        private boolean isMarry;
        protected String mobile;
        public String address;
    
        public void setIsMarry(boolean isMarry) {
            this.isMarry = isMarry;
        }
    
        public boolean isMarry() {
    
            return isMarry;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
    
        public void setName(String name) {
            Name = name;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public String getAddress() {
    
            return address;
        }
    
        public int getAge() {
            return age;
        }
    
        public String getMobile() {
            return mobile;
        }
    
        public String getName() {
            return Name;
        }
    
        public double getPrice() {
            return price;
        }
    }

    反射获取相关代码:

    public class Test {
    
        public static void main(String[] args) {
            System.out.println();
            System.out.println("setField:");
            setField();
    
            System.out.println();
            System.out.println("getFields:");
            getFields();
    
            System.out.println();
            System.out.println("invokeMethod:");
            invokeMethod();
    
            System.out.println();
            System.out.println("getMethod:");
            getMethod();
    
        }
    
        /**
         * 调用方法
         */
        private static void invokeMethod() {
            Class clazz = getClass(PersonBean.class.getName());
    
            try {
                Object object = clazz.newInstance();
                System.out.println("age is :"+ (((PersonBean)object).getAge()));
                Method method = clazz.getMethod("setAge", int.class);
                method.invoke(object, 123456);
    
                Method method1 = clazz.getMethod("getAge");
                int age = (int) method1.invoke(object);
                System.out.println("age is :"+ age);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 设置属性
         */
        private static void setField() {
            Class clazz = getClass(PersonBean.class.getName());
            try {
                PersonBean personBean = (PersonBean) clazz.newInstance();
                Field[] fields = clazz.getDeclaredFields();
    
                System.out.println("设置属性:");
                for (int i = 0; i < fields.length; i++) {
                    Field field = fields[i];
                    field.setAccessible(true);
                    if (field.getType().equals(int.class)) {
                        field.setInt(personBean, 24);
    
                    } else if (field.getType().equals(double.class)) {
                        field.setDouble(personBean, 24);
    
                    } else if (field.getType().equals(float.class)) {
    
                    } else if (field.getType().equals(boolean.class)) {
                        field.setBoolean(personBean, true);
    
                    } else if (field.getType().equals(String.class)) {
                        field.set(personBean, "广州");
                    }
    
                }
                System.out.println(personBean.getAge());
                System.out.println(personBean.getAddress());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取所有属性
         */
        private static void getFields() {
            Class clazz = getClass(PersonBean.class.getName());
            Field[] fields = clazz.getDeclaredFields();
    
            System.out.println("属性有:");
            for (int i = 0; i < fields.length; i++) {
                System.out.println(Modifier.toString(fields[i].getModifiers())+" "+fields[i].getType().getSimpleName()+" "+fields[i].getName());
            }
        }
    
        private static String getModifiers(int modifiers) {
            String modifierName;
            Modifier modifier = new Modifier();
            if (modifier.isPublic(modifiers)) {
                modifierName = "public";
            } else if (modifier.isProtected(modifiers)) {
                modifierName = "protected";
            } else if (modifier.isPrivate(modifiers)) {
                modifierName = "private";
            } else {
                modifierName = modifiers+"";
            }
            return modifierName;
        }
    
        /**
         * 获取所有方法
         */
        private static void getMethod() {
            Class clazz = getClass(PersonBean.class.getName());
            Method[] methods = clazz.getDeclaredMethods();
            for (Method method: methods) {
                String methodModifier = getModifiers(method.getModifiers());
                String methodName = method.getName();
                String methodReturnType = method.getReturnType().getName();
                Class<?>[] methodParam = method.getParameterTypes();
    
                String methodParamName = "";
                for (int i = 0; i < methodParam.length; i++) {
                    Class param = methodParam[i];
                    methodParamName = methodParamName + param.getName() + " arg"+i+",";
                }
                if (methodParamName.length() > 1) {
                    methodParamName = methodParamName.substring(0, methodParamName.length()-1);
                }
                methodParamName = "("+methodParamName+")";
    
                System.out.println(methodModifier+" "+methodReturnType+" "+methodName +" "+methodParamName);
            }
        }
    
        /**
         * 获取class对象
         * @param clazzName
         * @return
         */
        private static Class getClass(String clazzName) {
            Class clazz = null;
            try {
                clazz = Class.forName(clazzName);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return clazz;
        }
    
    }

    输出结果:

  • 相关阅读:
    英语apyrite红碧玺apyrite单词
    英语SouthRedAgate南红玛瑙
    英语kutnahorite金田黄kutnahorite单词
    英语chalchite蓝绿松石chalchite单词
    单词demantoite翠榴石demantoite英语
    英语fieldyellowstone田黄石fieldyellowstone单词
    Http通讯Util
    redis分布式锁工具类
    永不重复的id生成器
    二维码生成工具类
  • 原文地址:https://www.cnblogs.com/Mr-Mo/p/4613796.html
Copyright © 2011-2022 走看看