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 反射

原文地址:https://www.cnblogs.com/changkai244/p/4115156.html