反射_Class对象功能概述-反射_Class对象功能_获取Field
反射_Class对象功能概述
* Class对象功能: * 获取功能: 1. 获取成员变量们 * Field[] getFields() :获取所有public修饰的成员变量 * Field getField(String name) 获取指定名称的 public修饰的成员变量 * Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符 * Field getDeclaredField(String name) 2. 获取构造方法们 * Constructor<?>[] getConstructors() * Constructor<T> getConstructor(类<?>... parameterTypes) * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) * Constructor<?>[] getDeclaredConstructors() 3. 获取成员方法们: * Method[] getMethods() * Method getMethod(String name, 类<?>... parameterTypes) * Method[] getDeclaredMethods() * Method getDeclaredMethod(String name, 类<?>... parameterTypes) 4. 获取全类名 * String getName()
Person类:
public class Person { private String name; private int age; public String a; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", a='" + a + '\'' + '}'; public void eat() { System.out.println("eat..."); } public void eat(String food) { System.out.println("eat..." + food); } }
反射_Class对象功能_获取Field
Field[] getFields():获取所有public修饰的成员变量
Field getField(String name):获取指定名称的 public修饰的成员变量
Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
Field:成员变量
操作:
1、设置值
void set(Object obj,Object value)
2、获取值
get(Object obj)
3、忽略访问权限修饰符的安全检查
setAccessible(true):暴力反射
import domain.Person; import java.lang.reflect.Field; public class ReflectDemo2 { public static void main(String[] args) throws Exception { //0、获取Person的Class对象 Class personClass = Person.class; //1、Field[] getFields() Field[] fields = personClass.getFields(); for (Field field : fields) { System.out.println(field); } System.out.println("--------"); //Field getField(String name) Field a = personClass.getField("a"); //获取成员变量a的值 Person p = new Person(); Object value = a.get(p); System.out.println(value); //设置a的值 a.set(p,"张三"); System.out.println(p); System.out.println("##################"); //Field[] getDeclaredFields(),获取所有的成员变量,不考虑修饰符 Field[] declaredFields = personClass.getDeclaredFields(); for(Field decl : declaredFields){ System.out.println(decl); } //Field getDeclaredField(String name) Field d = personClass.getDeclaredField("age"); //忽略访问权限修饰符的安全检查 d.setAccessible(true);//暴力反射 Object value2 = d.get(p); System.out.println(value2); } }
运行结果:
