一、通过反射获取Field对象
Filed中保存的就是类的成员变量。
实现方法:
Field[] getFields():返回所有公共成员变量的数组
Field[] getDeclaredFidlds():返回所有成员变量对象的数组(包括public和private)
Field getField(String name):返回单个公共成员变量对象,name表示成员变量的名字
Field getDeclaredField(String name):返回单个成员变量对象(包括public和private)
过程:
1.获取类的字节流对象,获取字节流对象的三种方法:1.类名.class;2.Class.forName(全类名);3.对象.getClass();
2.利用字节码对象,获取Filed对象
3.如果类中的成员变量是被private修饰的则需要setAccessible(true);暴力反射
4.void set(Object obj,Object value) :给obj对象的成员变量赋值为value
5.Object get(Object obj)返回由该Field表示的字段在之低昂对象上的值
注意:若要获取成员变脸过的value或者给成员变量赋值,那么需要首先使用Constructor创建对象。
6. 给静态成员变量赋值,静态变量不需要对象,格式:set(null,value)
7.field.getName:获取成员变量名字(field是Field的对象)【可以用在field[]数组中,因为数组是获取了类的全部成员变量】
代码实现:
student类:
public class Student {
private String name;
private int age;
private String id;
private String phone;
private String address;
private String sexy;
public Student() {
}
public Student(String name, int age, String id, String phone, String address, String sexy) {
this.name = name;
this.age = age;
this.id = id;
this.phone = phone;
this.address = address;
this.sexy = sexy;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {