获取成员变量
-
Field getField(String name):返回此Class对象对应类的指定public Field。
-
Field[]getFields():返回此Class对象对应类的所有public Field。
public class Person { public int publicPerson1;protected int protectedPerson2;int defaultPerson3;private int privatePerson4; public static int age = 18;public void publicPerson1(){};protected void protectPerson2(){};void defaultPerson3(){};private void privatePerson4(){}; public static void test(){ } } public class Student extends Person {public int publicStudent1;protected int protectedStudent2;int defaultStudent3;private int privateStudent4; public void publicStudent1(){};protected void protectStudent2(){};void defaultStudent3(){};private void privateStudent4(String name){System.out.println(name);}public static void test(){ } @Overridepublic String toString() {return "Student{" +"publicStudent1=" + publicStudent1 +", protectedStudent2=" + protectedStudent2 +", defaultStudent3=" + defaultStudent3 +", privateStudent4=" + privateStudent4 +'}';} } /***getField()方法练习*/ public class GetFieldDemo {public static void main(String[] args) throws NoSuchFieldException {//获取Student类的Class对象Class clazz = Student.class;//获取自身声明的包括从父类继承的public修饰的成员变量Field[] fields = clazz.getFields();//获取自身声明的包括从父类继承的指定了名称的成员变量Field field = clazz.getField("publicStudent1");System.out.println(field);} }
-
Field getDeclaredField(String name):返回此Class对象对应类的指定Field,与Field的访问权限无关。
-
Field[] getDeclaredFields():返回此Class对象对应类的全部 Field,与Field的访问权限无关。
/*** getDeclaredDemo()方法练习*/ public class GetDeclaredFieldDemo {public static void main(String[] args) throws NoSuchFieldException {//获取Student类的Class对象Class clazz = Student.class;//获取自身声明的成员变量,与访问修饰符无关Field[] fields = clazz.getDeclaredFields();Field field = clazz.getDeclaredField("privateStudent4");System.out.println(field);} }
成员变量赋值和取值
/*** 通过反射访问成员变量*/ public class VisitField {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Class clazz = Student.class;Student student = new Student();//获取成员变量Field field = clazz.getDeclaredField("privateStudent4");//屏蔽访问检查,使得外部程序能够访问private修饰的成员变量field.setAccessible(true);//修改变量的值field.set(student,20);//获取变量的值int i = field.getInt(student);System.out.println(i);System.out.println(student); } }