5. 通过反射获取类中定义的属性获取属性与获取方法是类似的,只不过 getMethod 函数换成了 getField,getDeclaredMethod 换成了 getDeclaredField 。(1) 获取当前类中定义的属性(不包括从父类继承来的属性)要获取当前类中定义的所有属性(包括private、public、static等各种属性)可以调用 Class对象的getDeclaredFields函数;要想获得指定的属性,可以调用getDeclaredField。如以下代码所示
[url=][/url]
[url=][/url]
1 private static void showDeclaredFields() { 2 Student student = new Student("Bill", 18); 3 // 获取当前类中定义的所有属性并显示出来 4 Field[] fields = student.getClass().getDeclaredFields(); 5 for (Field field : publicFields) { 6 System.out.println("declared field name : " + field.getName()); 7 } 8 9 try {10 // 获取指定的属性11 Field gradeField = student.getClass().getDeclaredField("grade");12 // 获取属性值13 System.out.println("The grade is : " + gradeField.getInt(student));14 // 设置属性值15 gradeField.set(student, 10);16 System.out.println("The grade is : " + gradeField.getInt(student));17 } catch (Exception e) {18 e.printStackTrace();19 }20 }[url=][/url]
[url=][/url]
(2)获取当前类和父类中定义的public属性要获取当前类和父类中定义的所有public 属性可以调用Class对象的getFields 函数,而要获取某个指定的public属性,可以调用getField方法,如以下代码所示:
[url=][/url]
[url=][/url]
private static void showFields() { Student student = new Student("Bill", 18); // 获取当前类和父类的所有public属性并显示 Field[] publicFields = student.getClass().getFields(); for (Field field : publicFields) { System.out.println("field name : " + field.getName()); } |