1、方法

  • Field[] getFields() :获取所有public修饰的成员变量
  • Field getField(String name) 获取指定名称的 public修饰的成员变量
  • Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
  • Field getDeclaredField(String name)

    2、常用操作

  • Field:成员变量

    • 操作:
      1. 设置值
        • void set(Object obj, Object value)
      2. 获取值
        • get(Object obj)
      3. 忽略访问权限修饰符的安全检查
        • setAccessible(true):暴力反射

3、代码

  1. package cn.itcast.reflect;
  2. import cn.itcast.domain.Person;
  3. import java.lang.reflect.Field;
  4. public class ReflectDemo2 {
  5. /**
  6. Class对象功能:
  7. * 获取功能:
  8. 1. 获取成员变量们
  9. * Field[] getFields()
  10. * Field getField(String name)
  11. * Field[] getDeclaredFields()
  12. * Field getDeclaredField(String name)
  13. 2. 获取构造方法们
  14. * Constructor<?>[] getConstructors()
  15. * Constructor<T> getConstructor(类<?>... parameterTypes)
  16. * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
  17. * Constructor<?>[] getDeclaredConstructors()
  18. 3. 获取成员方法们:
  19. * Method[] getMethods()
  20. * Method getMethod(String name, 类<?>... parameterTypes)
  21. * Method[] getDeclaredMethods()
  22. * Method getDeclaredMethod(String name, 类<?>... parameterTypes)
  23. 4. 获取类名
  24. * String getName()
  25. */
  26. public static void main(String[] args) throws Exception {
  27. //0.获取Person的Class对象
  28. Class personClass = Person.class;
  29. /*
  30. 1. 获取成员变量们
  31. * Field[] getFields()
  32. * Field getField(String name)
  33. * Field[] getDeclaredFields()
  34. * Field getDeclaredField(String name)
  35. */
  36. //1.Field[] getFields()获取所有public修饰的成员变量
  37. Field[] fields = personClass.getFields();
  38. for (Field field : fields) {
  39. System.out.println(field);
  40. }
  41. System.out.println("------------");
  42. //2.Field getField(String name)
  43. Field a = personClass.getField("a");
  44. //获取成员变量a 的值
  45. Person p = new Person();
  46. Object value = a.get(p);
  47. System.out.println(value);
  48. //设置a的值
  49. a.set(p,"张三");
  50. System.out.println(p);
  51. System.out.println("===================");
  52. //Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
  53. Field[] declaredFields = personClass.getDeclaredFields();
  54. for (Field declaredField : declaredFields) {
  55. System.out.println(declaredField);
  56. }
  57. //Field getDeclaredField(String name)
  58. Field d = personClass.getDeclaredField("d");
  59. //忽略访问权限修饰符的安全检查
  60. d.setAccessible(true);//暴力反射
  61. Object value2 = d.get(p);
  62. System.out.println(value2);
  63. }
  64. }