zoukankan      html  css  js  c++  java
  • Java_反射demo

    package com.cnit.reflect;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class Main {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            try {
                Class<?> classObj = Class.forName("com.cnit.reflect.bean.Person");
                Object obj = classObj.newInstance();
                //设置变量值
                setFieldValue(classObj, obj,"str", "wangwu");
                System.out.println(getFieldValue(classObj, obj, "str"));
                Object paramValue[] = new Object[1];
                paramValue[0] = "liu si";
                setMethodValue(classObj, obj, "setStr",paramValue , String.class);
                System.out.println(getMethodValue(classObj, obj, "getStr"));;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 给方法设值
         * @param classLoad
         *             类加载器
         * @param obj
         *             类的对象
         * @param methodName
         *             方法名
         * @param pramValue
         *             设置的参数的值
         * @param parameterTypes
         *             参数的类型
         */
        private static void setMethodValue(Class<?> classLoad,Object obj,String methodName,Object[] pramValue,Class<?>... parameterTypes) {
            try {
                Method method = classLoad.getDeclaredMethod(methodName, parameterTypes);
                method.setAccessible(true);
                method.invoke(obj, pramValue);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 获取方法的值
         * @param classLoad
         *             类加载器
         * @param obj
         *             类的对象
         * @param methodName
         *             方法名
         * @return Object
         *             返回的值
         */
        private static Object getMethodValue(Class<?> classLoad,Object obj,String methodName) {
            try {
                Method method = classLoad.getDeclaredMethod(methodName);
                method.setAccessible(true);
                return method.invoke(obj);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        /**
         * 设置属性的值
         * @param classObj
         *             类加载器
         * @param obj
         *         类的对象
         * @param fieldValue
         *             变量的值 
         */
        private static void setFieldValue(Class<?> classObj,Object obj ,String fieldName,Object fieldValue) {
            try {
                Field field = classObj.getDeclaredField(fieldName);
                field.setAccessible(true);
                field.set(obj, fieldValue);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 获取属性的值
         * @param classObj
         *             类加载器
         * @param obj
         *         类的对象
         * @return
         *         变量值
         */
        private static Object getFieldValue(Class<?> classObj,Object obj,String fieldName) {
            try {
                Field field = classObj.getDeclaredField(fieldName);
                field.setAccessible(true);
                return field.get(obj);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        
    }
    package com.cnit.reflect.bean;
    
    public class Person {
        private String str;
    
        public String getStr() {
            return str;
        }
    
        public void setStr(String str) {
            this.str = str;
        }
        
        
    }

    java 反射

  • 相关阅读:
    服务器建设问题
    JDBC --反射(二)
    Cookies
    http和https区别
    springboot常用注解
    线程池
    悲观锁和乐观锁
    java高并发下的数据安全
    idea解决mybatis逆向工程
    spring Cloud
  • 原文地址:https://www.cnblogs.com/changkai244/p/4115156.html
Copyright © 2011-2022 走看看