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