反射_通过反射获取成员变量、构造方法、成员方法的使用

末蓝、 2022-06-17 02:42 264阅读 0赞
  1. package cn.itcast_01;
  2. public class Person {
  3. private String name;
  4. int age;
  5. public String address;
  6. public Person() {
  7. }
  8. private Person(String name) {
  9. this.name = name;
  10. }
  11. Person(String name, int age) {
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public Person(String name, int age, String address) {
  16. this.name = name;
  17. this.age = age;
  18. this.address = address;
  19. }
  20. public void show() {
  21. System.out.println("show");
  22. }
  23. public void method(String s) {
  24. System.out.println("method:" + s);
  25. }
  26. public String getString(String name, int age) {
  27. return name + "----" + age;
  28. }
  29. private void function() {
  30. System.out.println("function");
  31. }
  32. @Override
  33. public String toString() {
  34. return "Person [" + "name=" + name + ", " + "age=" + age + ", "
  35. + "address=" + address + "]";
  36. }
  37. }
  38. package cn.itcast_04;
  39. import java.lang.reflect.Constructor;
  40. import java.lang.reflect.Field;
  41. import java.lang.reflect.Method;
  42. /*
  43. * 需求:通过反射对Person进行操作使用
  44. *
  45. * private String name;
  46. * int age;
  47. * public String address;
  48. *
  49. * public Person()
  50. * private Person(String name)
  51. * Person(String name, int age)
  52. * public Person(String name, int age, String address)
  53. *
  54. * public void show()
  55. * public void method(String s)
  56. * public String getString(String name, int age)
  57. * private void function()
  58. */
  59. public class ReflectDemo2 {
  60. public static void main(String[] args) throws Exception {
  61. // 获取字节码文件对象
  62. Class c = Class.forName("cn.itcast_01.Person");
  63. // 获取无参构造方法对象
  64. Constructor con = c.getConstructor();
  65. // 通过无参构造方法对象创建对象
  66. Object obj = con.newInstance();
  67. System.out.println(obj);
  68. // 通过反射给所有成员变量赋值
  69. System.out.println("****通过反射给所有成员变量赋值****");
  70. // private String name;
  71. Field nameField = c.getDeclaredField("name");
  72. nameField.setAccessible(true);
  73. nameField.set(obj, "风清杨");
  74. System.out.println(obj);
  75. // int age;
  76. Field ageField = c.getDeclaredField("age");
  77. ageField.setAccessible(true);
  78. ageField.set(obj, 27);
  79. System.out.println(obj);
  80. // public String address;
  81. Field addressField = c.getField("address");
  82. addressField.set(obj, "上海");
  83. System.out.println(obj);
  84. // 通过反射给所有构造方法赋值
  85. System.out.println("****通过反射给所有构造方法赋值****");
  86. // public Person()
  87. // private Person(String name)
  88. Constructor con2 = c.getDeclaredConstructor(String.class);
  89. con2.setAccessible(true);
  90. Object obj2 = con2.newInstance("王小明");
  91. System.out.println(obj2);
  92. // Person(String name, int age)
  93. Constructor con3 = c.getDeclaredConstructor(String.class, int.class);
  94. con3.setAccessible(true);
  95. Object obj3 = con3.newInstance("林子聪", 35);
  96. System.out.println(obj3);
  97. // public Person(String name, int age, String address)
  98. Constructor con4 = c.getConstructor(String.class, int.class,
  99. String.class);
  100. Object obj4 = con4.newInstance("江小斐", 56, "山东");
  101. System.out.println(obj4);
  102. // 通过反射调用所有成员方法
  103. System.out.println("****通过反射调用所有成员方法****");
  104. // public void show()
  105. Method m1 = c.getMethod("show");
  106. m1.invoke(obj);
  107. // public void method(String s)
  108. Method m2 = c.getMethod("method", String.class);
  109. m2.invoke(obj, "hello");
  110. // public String getString(String name, int age)
  111. Method m3 = c.getMethod("getString", String.class, int.class);
  112. Object objString = m3.invoke(obj, "world", 100);
  113. System.out.println(objString);
  114. // private void function()
  115. Method m4 = c.getDeclaredMethod("function");
  116. m4.setAccessible(true);
  117. m4.invoke(obj);
  118. }
  119. }

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读