field [fiːld] 领域的意思 这里是指成员对象


package com.itheima.d4_reflect_field;import org.junit.Test;import java.lang.reflect.Field;/**目标:反射_获取Field成员变量对象。反射的第一步是先得到Class类对象。1、Field getField(String name);根据成员变量名获得对应Field对象,只能获得public修饰2.Field getDeclaredField(String name);根据成员变量名获得对应Field对象,只要申明了就可以得到3.Field[] getFields();获得所有的成员变量对应的Field对象,只能获得public的4.Field[] getDeclaredFields();获得所有的成员变量对应的Field对象,只要申明了就可以得到小结:获取全部成员变量:getDeclaredFields获取某个成员变量:getDeclaredField*/public class FieldDemo01 {/*** 1.获取全部的成员变量。* Field[] getDeclaredFields();* 获得所有的成员变量对应的Field对象,只要申明了就可以得到*/@Testpublic void getDeclaredFields(){// a. 定位Class对象Class c = Student.class;// b.定位全部成员变量 getDeclaredFields返回的是一个Field[](成员对象)的数组Field[] fields = c.getDeclaredFields(); // 拿到所有的成员对象// c. 将成员对象遍历出来 (将成员数组遍历)for (Field field : fields) {System.out.println(field.getName() + "===>" + field.getType());/*** name===>class java.lang.String* age===>int* schoolName===>class java.lang.String* COUNTTRY===>class java.lang.String*/}}/**2.获取某个成员变量对象 Field getDeclaredField(String name);*/@Testpublic void getDeclaredField() throws Exception {// a. 定位class对象Class c = Student.class;// b. 根据名称定位某个成员变量Field f = c.getDeclaredField("age"); // 获取成员名为 age的成员变量System.out.println(f.getName() + "===> " + f.getType()); // age===> int}}
package com.itheima.d4_reflect_field;import org.junit.Test;import java.lang.reflect.Field;/**目标:反射获取成员变量: 取值和赋值。Field的方法:给成员变量赋值和取值void set(Object obj, Object value):给对象注入某个成员变量数据Object get(Object obj):获取对象的成员变量的值。void setAccessible(true);暴力反射,设置为可以直接访问私有类型的属性。Class getType(); 获取属性的类型,返回Class对象。String getName(); 获取属性的名称。*/public class FieldDemo02 {@Testpublic void setField() throws Exception{// a. 反射第一步,获取类对象Class c = Student.class;// b. 提取某个成员变量Field ageF = c.getDeclaredField("age");// 由于该成员是私有的,所以要暴力打开权限(只许一次)ageF.setAccessible(true);// c. 赋值Student s = new Student();ageF.set(s,18); // 为 成员变量赋值System.out.println(s);// d. 取值 由于取到的值是Field类型的数据,要进行int强转int age = (int) ageF.get(s);System.out.println(age);/*** 无参数构造器执行!* Student{name='null', age=18}* 18*/}}
package com.itheima.d4_reflect_field;public class Student {private String name;private int age;public static String schoolName;public static final String COUNTTRY = "中国";public Student(){System.out.println("无参数构造器执行!");}public Student(String name, int age) {System.out.println("有参数构造器执行!");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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}}
