首頁 > Java > java教程 > 什麼是反射技巧? Java中最常用的反射技術實例

什麼是反射技巧? Java中最常用的反射技術實例

php是最好的语言
發布: 2018-08-04 13:58:39
原創
1137 人瀏覽過

什麼是反射技術?

動態取得指定類別以及類別中的內容(成員),並執行其內容。應用程式已經運行,無法在其中進行new物件的建立,就無法使用物件。這時可以根據設定檔的類別全名去找對應的字節碼文件,並載入進內存,並建立該類別物件實例。這就需要使用反射技術完成,還有就是在一個類別中,為了不讓外界存取到有的屬性和方法,通常將其設定為private,這時我們就可以java反射帶來的便利存取類別的私有屬性及方法:

最常用的反射技術

/**Person类****/package com.qiu;public class Person {
    private String name;    private static Integer age;    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public Integer getAge() {        return age;
    }    public void setAge(Integer age) {        this.age = age;
    }    @Override
    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String toString1() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String demo(String de) {        return de;
    }
}
登入後複製
package com.qiu;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/**
 * 测试类
 * @author qiu
 *
 */public class Test {

    public static void main(String[] args) throws Exception {        //加载Person.class文件进内存
        Class clazz = Class.forName("com.qiu.Person");        //获取该类指定的属性age  getDeclaredField----> 获取所有属性,包括私有
        Field field = clazz.getDeclaredField("age");        //获取该类指定的属性name
        Field field2 = clazz.getDeclaredField("name");        //通过clazz实列化对象
        Object obj = clazz.newInstance();        //暴力访问。如果不设置默认为false是访问不到私有属性的。
        field.setAccessible(true);        //暴力访问。
        field2.setAccessible(true);        //初始化属性值
        field.set(obj, 123);
        field2.set(obj, "李白");        //获取该字段的值。
        Object o = field.get(obj);
        Object o1 = field2.get(obj);
        System.out.println(o);
        System.out.println(o1);        /*** 通过更简洁的方法获取指定方法 **/
        Method method = clazz.getMethod("getAge", null);
        System.out.println(method.invoke(obj, null));    /******** 通过反射获取带参数的方法  ******************************/

        Class clazz2 = Class.forName("com.qiu.Person");
        Method method41 = clazz2.getMethod("demo",String.class);
        Object obj3 = clazz.newInstance();
        System.out.println(method41.invoke(obj3, "邱某"));

    }
}
登入後複製

列印結果如下:

123
 李白
 123
邱某

相關文章:

工作中常用到的Java反射

##java中的反射機制

以上是什麼是反射技巧? Java中最常用的反射技術實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板