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 = Clas敏感词orName(clazzName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return clazz;
    }
 
}
输出结果:

全部评论
点赞 回复 分享
发布于 2017-10-22 00:39

相关推荐

不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
06-24 19:27
云南大学 Java
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
评论
2
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务