七、反射

一、反射機制 :

將類的各個部分 組成一個新的對象(Class 對象) 就是反射機制

二、獲取反射對象

通過 對象名.getClass()
通過 類名.class 來獲取
Class.forName(“完整的包名+類名”)

        Person person = new Person();
        Class pClass1 = person.getClass();
        Class pClass2 = Person.class;
        Class pClass3 = Class.forName("com.project.demo.Person");

三、 獲取構造方法

public Constructor<?>[] getConstructors():獲取所有的公有的構造方法
public Constructor<?>[] getDeclaredConstructors():獲取所有的構造方法
public Constructor<T> getConstructor(@RecentlyNullable Class<?>... parameterTypes):獲取單個共有構造方法
public Constructor<T> getDeclaredConstructor(@RecentlyNullable Class<?>... parameterTypes):獲取單個私有構造方法

Class cla = Class.forName("com.project.demo.Person");
        //獲取私有的單個構造方法(匹配參數)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //對于私有構造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通過反射來實例化對象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");

四、獲取成員方法

public Method[] getMethods():獲取所有的公有的方法包括父類方法
public Method[] getDeclaredMethods():獲取所有方法
public Method getMethod(@RecentlyNonNull String name, @RecentlyNullable Class<?>... parameterTypes):獲取單個公有的方法
public Method getDeclaredMethod(@RecentlyNonNull String name, @RecentlyNullable Class<?>... parameterTypes):獲取單個私有的方法

Class cla = Class.forName("com.project.demo.Person");
        //獲取私有的單個構造方法(匹配參數)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //對于私有構造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通過反射來實例化對象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");
        //獲取私有的成員方法(匹配方法名和參數)
        Method met = cla.getDeclaredMethod("speck",String.class);
        //使用暴力反射去除私有
        met.setAccessible(true);
       //調用方法
        Object o = met.invoke(per,"阿豪");

五、反射獲取成員變量
public Field[] getFields():獲取公有的成員變量
public native Field[] getDeclaredFields():獲取所有的成員變量
public Field getField(@RecentlyNonNull String name):獲取單個共有成員變量
public native Field getDeclaredField(@RecentlyNonNull String var1):獲取單個私有的成員變量

Class cla = Class.forName("com.project.demo.Person");
        //獲取私有的單個構造方法(匹配參數)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //對于私有構造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通過反射來實例化對象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");
        Field  f  =cla.getDeclaredField("age");
        //使用暴力反射去除私有
        f.setAccessible(true);
        //設置成員變量值
        f.set(per,18);
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容