java中的反射简单实例

package club.reflection.entity.User;
/**
 * 实体类
 * 
 */
public class User {
    public String name;
    private Integer age;
    private String sex;
    
    public User(){
        
    }
    public User(String name,Integer age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    
    public void eat(){
        System.out.println("喜欢吃!!!!");
    }
    public void show(){
        System.out.println("name:"+name);
        System.out.println("tage:"+age);
        System.out.println("sex:"+sex);
    }
    public void show(String xxx){
        System.out.println("name:"+name);
        System.out.println("tage:"+age);
        System.out.println("sex:"+sex);
        System.out.println(xxx);
    }
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import club.reflection.entity.User.User;

/**
 *  反射实例 通过反射获取实体类中的属性方法 
 * @author Mr储
 *
 */
public class RefDemo {

    public static void main(String[] args) {
        try {
            //获得Class对象()方法一通过Class静态方法forNmae();
            Class cls1 = Class.forName("club.reflection.entity.User.User");
            //通过class属性
            Class cls2 = User.class;
            //对象中通过Object类的getClass();
            Class cls3 = (new User()).getClass();
            System.out.println(String.class);
            //通过Class的newInstance()获得对象的实例返回Object类型
            Object obj = cls3.newInstance();
            //强制转换为User类型
            User user = (User)obj;
//            System.out.println(cls3.getName());//club.reflection.instance.User获得类的完整名字
//            System.out.println(cls3.getConstructors());//获得构造方法
            
            for(Field f : cls1.getDeclaredFields()){
                System.out.println(f);
            }
            System.out.println("++++++++++");
            for(Field f : cls1.getFields()){
                System.out.println(f);
            }
            /*//初始化一个User对象
            User u1 = new User("张三",18,"男");
            
            //获取属性
            u1.show();
            showField(u1);
            u1.show();//属性赋值后的比较
            
            
            //获取方法
            showMethods(u1);*/
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获得类的属性 
     */
    public static void showField(Object obj){
        try {
            //将obj转化为Class对象
            Class cls = obj.getClass();
            Field[] fields = cls.getDeclaredFields();//获得所有的属性
            for(Field field : fields){
                System.out.println(field.getName()+"	"+field.getType().getName());//获取属性名和类型
                //改变访问权限(使可以赋值)
                field.setAccessible(true);
                //给类中的属性赋值
                if(field.getType().getName().equals("java.lang.String")){
                    field.set(obj, "名字");
                }else if(field.getType().getName().equals("java.lang.Integer")){
                    field.set(obj, 222);
                }
                
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取方法
     */
    public static void showMethods(Object obj){
        Class cls = obj.getClass();
        Method[] methods = cls.getDeclaredMethods();//获取所有方法
        for(Method m : methods){
            System.out.println("方法:"+m);
            System.out.println("方法名称:"+m.getName());
            System.out.println("访问修饰符:"+Modifier.toString(m.getModifiers()));
            System.out.println("返回值类型:"+m.getReturnType());
            
            //获得参类型
            Class[] ClassParameters = m.getParameterTypes();
            for(Class c : ClassParameters){
                System.out.println("参数类型:"+c.getName());
            }
        }
        
        try {
            //获得对象的方法
            Method show1 = cls.getMethod("show");
            //执行方法
            show1.invoke(obj);
            
            //获得对象的方法
            /**
             * "show"要执行的方法名
             * String.calss 方法参数的参数类型
             */
            Method show2 = cls.getMethod("show",String.class);
            //执行方法
            show2.invoke(obj, "反射调用传参");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/cpstart/p/5990985.html