获取成员变量
-
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);
}
}