获取类中的所有属性
/**
* 获取类中的所有属性
*
* @author Administrator
* @date 2022/09/11
*/
public class ReflexDemo05 {
public static void main(String[] args) {
// 获取类对象
Class<User> clazz = User.class;
// 获取类型中定义的字段 公有字段 包括当前类以及父类中的共有字段
System.out.println("====================getFields()====================");
Field[] fields1 = clazz.getFields();
for (Field field : fields1) {
System.out.println(Modifier.toString(field.getModifiers()) + "\t" + field.getName());
}
// 获取类型中定义的字段公有字段以及私有字段(只能够获取当前类中的成员)
System.out.println("====================getDeclaredFields()====================");
Field[] fields2 = clazz.getDeclaredFields();
for (Field field : fields2) {
System.out.println(Modifier.toString(field.getModifiers()) + "\t" + field.getName());
}
}
}
私有字段设置值
/**
* 私有字段设置值
*
* @author Administrator
* @date 2022/09/11
*/
public class ReflexDemo06 {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchFieldException {
Class<User> clazz = User.class;
User instance = clazz.newInstance();
Field nameField = clazz.getDeclaredField("name");
// 反射如需访问私有属性,需要手动开放访问权限
nameField.setAccessible(true);
nameField.set(instance, "张三");
System.out.println("name:" + instance.getName());
}
}
给私有属性设置值如果不开放访问权限,会出现如下异常:
Exception in thread "main" java.lang.IllegalAccessException: Class com.example.demo.ReflexDemo06 can not access a member of class com.example.entity.User with modifiers "private"
通过nameField.setAccessible(true);给私有属性开放访问权限。
静态字段设置值
/**
* 静态字段设置值
*
* @author Administrator
* @date 2022/09/11
*/
public class ReflexDemo07 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException{
Class<User> clazz = User.class;
Field nameField = clazz.getDeclaredField("address");
nameField.set(null, "广州");
System.out.println("address:" + User.address);
}
}