Java学习:反射机制

前提:Person类已经定义属性(name,age)、方法(toString)、无参构造函数(感觉像是必须的)
1、获取类—>通过类的newInstance()方法创建运行时类对象—>通过clazz.getDeclaredField(“name”)【用于非public属性,结合f1.setAccessible(true)使用】或者clazz.getField(“name”)【用于public属性】获取类属性name,这里为f1—>通过类属性.set(p1,值)方法进行类对象p1对应属性name设置【为值】,其他类似—>通过clazz.getMethod(“toString”,参数)获取类方法toString(),通过m1.invoke(p1,参数)进行类对象方法调用,其他类似。
注意:
1)属性名、方法名均带双引号;
2)非public的类方法与非public的类属性的做法类似;
Class clazz = Person.class;
Person p1 = (Person)clazz.newInstance();
System.out.println(p1);
Field f1 = clazz.getDeclaredField(“name”);
f1.setAccessible(true);
f1.set(p1, “LILILIliu”);
System.out.println(p1);
Field f2 = clazz.get**Declared**Field(“age”);
f2.setAccessible(true);
f2.set(p1, 43);
System.out.println(p1);
Method m1 = clazz.getMethod(“toString”);
System.out.println(m1.invoke(p1));
Method m2 = clazz.get**Declared**Method(“setAge”,Integer.class);
m2.setAccessible(true);
m2.invoke(p1, 23);
System.out.println(m1.invoke(p1));

你可能感兴趣的:(学习)