1. 调用指定的属性

  1. @Test
  2. public void testField1() throws Exception {
  3. Class clazz = Person.class;
  4. //创建运行时类的对象
  5. Person p = (Person) clazz.newInstance();
  6. //1. getDeclaredField(String fieldName):获取运行时类中指定变量名的属性
  7. Field name = clazz.getDeclaredField("name");
  8. //2.保证当前属性是可访问的
  9. name.setAccessible(true);
  10. //3.获取、设置指定对象的此属性值
  11. name.set(p,"Tom");
  12. System.out.println(name.get(p));
  13. }

2. 调用指定的方法

  1. @Test
  2. public void testMethod() throws Exception {
  3. Class clazz = Person.class;
  4. //创建运行时类的对象
  5. Person p = (Person) clazz.newInstance();
  6. /*
  7. 1.获取指定的某个方法
  8. getDeclaredMethod():参数1 :指明获取的方法的名称 参数2:指明获取的方法的形参列表
  9. */
  10. Method show = clazz.getDeclaredMethod("show", String.class);
  11. //2.保证当前方法是可访问的
  12. show.setAccessible(true);
  13. /*
  14. 3. 调用方法的invoke():参数1:方法的调用者 参数2:给方法形参赋值的实参
  15. invoke()的返回值即为对应类中调用的方法的返回值。
  16. */
  17. Object returnValue = show.invoke(p,"CHN"); //String nation = p.show("CHN");
  18. System.out.println(returnValue);
  19. System.out.println("*************如何调用静态方法*****************");
  20. // private static void showDesc()
  21. Method showDesc = clazz.getDeclaredMethod("showDesc");
  22. showDesc.setAccessible(true);
  23. //如果调用的运行时类中的方法没返回值,则此invoke()返回null
  24. // Object returnVal = showDesc.invoke(null);
  25. Object returnVal = showDesc.invoke(Person.class);
  26. System.out.println(returnVal);//null
  27. }

3. 调用指定的构造器

  1. @Test
  2. public void testConstructor() throws Exception {
  3. Class clazz = Person.class;
  4. //private Person(String name)
  5. /*
  6. 1.获取指定的构造器
  7. getDeclaredConstructor():参数:指明构造器的参数列表
  8. */
  9. Constructor constructor = clazz.getDeclaredConstructor(String.class);
  10. //2.保证此构造器是可访问的
  11. constructor.setAccessible(true);
  12. //3.调用此构造器创建运行时类的对象
  13. Person per = (Person) constructor.newInstance("Tom");
  14. System.out.println(per);
  15. }