通过反射获取成员变量
方法 |
说明 |
getFields() |
返回一个包含Field对象的数组。Field对象反映由该Class对象表示的类或接口的所有可访问的公共成员变量 |
getDeclaredFields () |
返回的数组 Field对象反映此表示的类或接口声明的所有成员变量 |
getField(String name) |
返回一个Field对象,该对象反映由该Class对象表示的类或接口的指定公共成员变量 |
getDeclaredField(String name) |
返回一个Field对象,该对象反映由该Class对象表示的类或接口的指定成员变量 |
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
Class<?> aClass = Class.forName("commm.Student");
//获取公共成员变量
Field[] field = aClass.getFields();
for (Field field1:field){
System.out.println(field1);
}
//获取所有成员变量
System.out.println("--------------------");
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field2:declaredFields){
System.out.println(field2);
}
System.out.println("--------------------");
//根据成员变量名获取公共成员变量
Field name = aClass.getField("address");
System.out.println(name);
System.out.println("--------------------");
//根据成员变量名获取成员变量
Field age = aClass.getDeclaredField("age");
System.out.println(age);
}
}
使用通过反射获得的成员变量
方法 |
说明 |
set(Object obj, Object value) |
给object对象的成员变量赋值为value |
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<?> aClass = Class.forName("commm.Student");
//通过反射获得构造方法对象
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
//通过构造方法对象实例化对象
Object object = declaredConstructor.newInstance();
//通过反射获得成员变量
Field age = aClass.getDeclaredField("age");
System.out.println(age);
age.set(object,21);
System.out.println(object);
}
}
测试
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<?> aClass = Class.forName("commm.Student");
//获取构造方法对象
Constructor<?> constructor = aClass.getConstructor();
//根据构造方法对象实例化
Object o = constructor.newInstance();
//获取成员变量
Field address = aClass.getField("address");
address.set(o,"山东");
Field age = aClass.getDeclaredField("age");
age.setAccessible(true);//取消访问检查
age.set(o,18);
Field name = aClass.getDeclaredField("name");
name.setAccessible(true);//取消访问检查
name.set(o,"zzt");
System.out.println(o);
}
}