国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java反射

2019-11-15 00:44:32
字體:
來源:轉載
供稿:網友
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;    }}

輸出結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台北县| 罗平县| 武山县| 上高县| 西盟| 手游| 菏泽市| 老河口市| 府谷县| 克什克腾旗| 江都市| 辽宁省| 建昌县| 咸阳市| 六枝特区| 桂阳县| 兰溪市| 江华| 无棣县| 平泉县| 襄樊市| 海安县| 金沙县| 乾安县| 九江市| 仪陇县| 宁蒗| 巴彦淖尔市| 大厂| 绥芬河市| 巴青县| 察哈| 库车县| 康保县| 博野县| 拉萨市| 长垣县| 新竹县| 河南省| 酒泉市| 巴东县|