Demo10.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package J20250806.reflection;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.InvocationTargetException;
  5. /**
  6. * @author WanJl
  7. * @version 1.0
  8. * @title Demo10
  9. * @description
  10. * 案例3:字段操作
  11. * 创建一个Student类,包含私有字段name和age,以及公共字段id。使用反射完成:
  12. * 获取所有字段(包括私有)并打印名称和类型
  13. * 修改私有字段age的值
  14. * 读取私有字段name的值
  15. * @create 2025/8/6
  16. */
  17. public class Demo10 {
  18. public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
  19. Class<Student> studentClass = Student.class;
  20. Constructor<Student> declaredConstructor = studentClass.getDeclaredConstructor();
  21. declaredConstructor.setAccessible(true);
  22. Student student = declaredConstructor.newInstance();
  23. Field[] declaredFields = studentClass.getDeclaredFields();
  24. for (int i = 0; i < declaredFields.length; i++) {
  25. Field field = declaredFields[i];
  26. System.out.println("第"+(i+1)+"成员变量--"+"变量名称:"+field.getName()+"变量类型:"+field.getType());
  27. }
  28. //age这个成员变量的对象
  29. Field ageField = declaredFields[2];
  30. //设置检查取消
  31. ageField.setAccessible(true);
  32. //给age这个成员变量赋值(指定当前的这个age属性属于哪个Student对象,变量值)
  33. ageField.set(student,66);
  34. System.out.println(ageField.get(student));
  35. Field nameField = declaredFields[1];
  36. nameField.setAccessible(true);
  37. System.out.println(nameField.get(student));
  38. }
  39. }