Person类里的属性和要演示的方法声明:
Class<Person> clazz=Person.class;
Person p=clazz.newInstance();
//操作属性
//1.通过getField返回一个Fiel类型的
Field age=clazz.getDeclaredField("age");
age.setAccessible(true);//要设置访问权限否则会报 IllegalAccessException
age.set(p,13);//13
System.out.println(age.get(p));
// Field age = clazz.getField("age");
// System.out.println(age);
/*java.lang.NoSuchFieldException: age
* 这个没有该属性异常,因为age属性是私有的,用getField取出的只有public修饰的类和其父类的属性
* */
Field name=clazz.getField("name");
name.set(p,"张三");//name是public修饰的属性
Object o=name.get(p);
System.out.println(o);//张三
System.out.println(p);//张三,13
//操作方法
//无参方法
Method method=clazz.getDeclaredMethod("eat");
method.setAccessible(true);
Object o1=method.invoke(p);//invoke返回的是方法返回值
System.out.println(o1);//Null
//有参方法,此方法用的是public修饰,用哪个get都行
Method method1=clazz.getMethod("getDetails", String.class, int.class);//传的是形参的class实例
Object o2=method1.invoke(p,"李四",20);
System.out.println(o2);//李四,20