1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package J20250806.reflection;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- /**
- * @author WanJl
- * @version 1.0
- * @title Demo03_FieldTest
- * @description
- * @create 2025/8/6
- */
- public class Demo03_FieldTest {
- public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
- Class<Person> personClass = Person.class;
- Constructor<Person> personConstructor =
- personClass.getDeclaredConstructor(Integer.class, String.class, Integer.class, String.class);
- //构造方法对象的取消检查
- personConstructor.setAccessible(true);
- //通过反射-构造方法对象创建的Person对象
- Person person = personConstructor.newInstance(16, "张三", 25, "男");
- System.out.println(person);
- //通过反射获取Person类的私有属性
- Field nameField = personClass.getDeclaredField("name");
- //成员变量对象的取消检查
- nameField.setAccessible(true);
- System.out.println(nameField.getName());
- //通过反射-获取Person类的属性,需要传入一个参数,这个参数其实就是通过反射获取构造方法创建的对象。
- //person参数就是目标对象
- Object name = nameField.get(person);
- System.out.println(name);
- //设置name属性的值---person这个参数其实就是目标对象
- nameField.set(person,"王老五");
- System.out.println("--------------------------");
- System.out.println(name);
- System.out.println(nameField.get(person));
- System.out.println(person);
- }
- }
|