代码实现
Teacher类,私有属性name
package com.mystep.step.demo1;
import java.lang.reflect.Field;
/**
* @author step
* @date 2021年08月14日 11:40
*/
public class TeaMain {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
String name="com.mystep.step.demo1.Teacher";//Teacher类的全限定名
Class<?> aClass = Class.forName(name);
Field name1 = aClass.getDeclaredField("name");
Teacher teacher = new Teacher();
teacher.setName("张三");
name1.setAccessible(true);
Object o = name1.get(teacher);
System.out.println(o);
}
}
其中
String name2 = teacher.getName();
name1.setAccessible(true);
上面这两句是等价的可以相互替换
当我们使用另一种创建对象的方式,.newInstance() 然后通过set(obj,属性)的形式来设置他的值
public class TeaMain {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
String name="com.mystep.step.demo1.Teacher";
Class<?> aClass = Class.forName(name);
Field name1 = aClass.getDeclaredField("name");
Object o1 = aClass.newInstance();
name1.setAccessible(true);
name1.set(o1,"张三");
Object o = name1.get(o1);
System.out.println(o);
}
}