一、反射
1. 反射获取成员变量
反射获取成员变量 是Java反射机制的核心功能之一,它使程序在运行时能够动态访问和操作类的成员变量(包括私有变量),而无需在编译时知道具体的类结构。
通俗理解 :就像你有一个"代码透视镜",可以让你在程序运行时"看透"类的内部,直接访问和修改它的任何成员变量,包括那些被private修饰的私有变量。


java
package com.lkbhua.MyreflectDemo3;
import java.lang.reflect.Field;
public class demo1 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
/*
Class类中用于获取成员变量的方法
Field[] getFields() 返回所有公共成员变量对象的数组
Field[] getDeclaredFields() 返回所有成员变量对象的数组
Field getField(String name) 返回单个公共成员变量对象
Field getDeclaredField(String name) 返回单个成员变量对象
Field类中用于获取成员变量属性的方法
void set(Object obj,Object value) 赋值
Object get(Object obj) 获取值
*/
// 1、获取class字节码文件的对象
Class<?> clazz = Class.forName("com.lkbhua.MyreflectDemo3.Student");
// 2、获取成员变量的对象
/*
Field[] fields = clazz.getFields();
for(Field f : fields){
System.out.println(f);
}
*/
System.out.println("--------------------------------------------------");
// 获取单个的成员变量
Field field = clazz.getField("name");
System.out.println(field);
// 获取权限修饰符
int modifiers = field.getModifiers();
System.out.println(modifiers);
// 获取成员变量名
String name = field.getName();
System.out.println(name);
// 获取成员变量的数据类型
Class<?> type = field.getType();
System.out.println(type);
// 获取成员变量的值
Student s = new Student("zhangsan", 18);
Object value = field.get(s);
System.out.println(value);
// 修改对象里面记录的值
field.set(s, "lisi");
System.out.println(s);
}
}