Demo03_FieldTest.java 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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 Demo03_FieldTest
  9. * @description
  10. * @create 2025/8/6
  11. */
  12. public class Demo03_FieldTest {
  13. public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
  14. Class<Person> personClass = Person.class;
  15. Constructor<Person> personConstructor =
  16. personClass.getDeclaredConstructor(Integer.class, String.class, Integer.class, String.class);
  17. //构造方法对象的取消检查
  18. personConstructor.setAccessible(true);
  19. //通过反射-构造方法对象创建的Person对象
  20. Person person = personConstructor.newInstance(16, "张三", 25, "男");
  21. System.out.println(person);
  22. //通过反射获取Person类的私有属性
  23. Field nameField = personClass.getDeclaredField("name");
  24. //成员变量对象的取消检查
  25. nameField.setAccessible(true);
  26. System.out.println(nameField.getName());
  27. //通过反射-获取Person类的属性,需要传入一个参数,这个参数其实就是通过反射获取构造方法创建的对象。
  28. //person参数就是目标对象
  29. Object name = nameField.get(person);
  30. System.out.println(name);
  31. //设置name属性的值---person这个参数其实就是目标对象
  32. nameField.set(person,"王老五");
  33. System.out.println("--------------------------");
  34. System.out.println(name);
  35. System.out.println(nameField.get(person));
  36. System.out.println(person);
  37. }
  38. }