生活随笔
收集整理的這篇文章主要介紹了
反射获取成员变量并使用【应用】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Class類獲取成員變量對象的方法
-
方法分類
方法名說明
| Field[] getFields() | 返回所有公共成員變量對象的數組 |
| Field[] getDeclaredFields() | 返回所有成員變量對象的數組 |
| Field getField(String name) | 返回單個公共成員變量對象 |
| Field getDeclaredField(String name) | 返回單個成員變量對象 |
-
示例代碼
public class ReflectDemo01 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//獲取Class對象Class<?> c = Class.forName("com.leon_02.Student");//Field[] getFields() 返回一個包含 Field對象的數組, Field對象反映由該 Class對象表示的類或接口的所有可訪問的公共字段//Field[] getDeclaredFields() 返回一個 Field對象的數組,反映了由該 Class對象表示的類或接口聲明的所有字段
// Field[] fields = c.getFields();Field[] fields = c.getDeclaredFields();for(Field field : fields) {System.out.println(field);}System.out.println("--------");//Field getField(String name) 返回一個 Field對象,該對象反映由該 Class對象表示的類或接口的指定公共成員字段//Field getDeclaredField(String name) 返回一個 Field對象,該對象反映由該 Class對象表示的類或接口的指定聲明字段Field addressField = c.getField("address");//獲取無參構造方法創建對象Constructor<?> con = c.getConstructor();Object obj = con.newInstance();// obj.addressField = "西安";//Field提供有關類或接口的單個字段的信息和動態訪問//void set(Object obj, Object value) 將指定的對象參數中由此 Field對象表示的字段設置為指定的新值addressField.set(obj,"西安"); //給obj的成員變量addressField賦值為西安System.out.println(obj);// Student s = new Student();
// s.address = "西安";
// System.out.println(s);}
}
Field類用于給成員變量賦值的方法
方法名說明
| voidset(Object obj,Object value) | 給obj對象的成員變量賦值為value |
反射獲取成員變量并使用練習【應用】
public class ReflectDemo02 {public static void main(String[] args) throws Exception {//獲取Class對象Class<?> c = Class.forName("com.leon_02.Student");//Student s = new Student();Constructor<?> con = c.getConstructor();Object obj = con.newInstance();System.out.println(obj);//s.name = "林青霞";
// Field nameField = c.getField("name"); //NoSuchFieldException: nameField nameField = c.getDeclaredField("name");nameField.setAccessible(true);nameField.set(obj, "林青霞");System.out.println(obj);//s.age = 30;Field ageField = c.getDeclaredField("age");ageField.setAccessible(true);ageField.set(obj,30);System.out.println(obj);//s.address = "西安";Field addressField = c.getDeclaredField("address");addressField.setAccessible(true);addressField.set(obj,"西安");System.out.println(obj);}
}
?
總結
以上是生活随笔為你收集整理的反射获取成员变量并使用【应用】的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。