思路
- 先通过Class.forName()方法获取类
- 通过获取的类来 ,进行创建(new)对象。
3.通过获取Class.forName()获取类然后调用其方法或获取属性Field ------getDeclaredField()方法获取Field 属性。
getDeclaredFields()方法获取整个类中的所有的属性(除了私有的) - 获取类的属性后调用Field中方法,来获取相应的属性getDeclaredField(“name”),参数属性名称,该方法返回符号该属性名称,最后调用 返回的Field 调用set(要修改的对象,修改的数据),进行修改对象的变量
- 私有属性的修改要先,调用 Filed中setAccessible(true)方法 修改属性的修饰符访问权限,但同时破坏了属性的封装性,后面跟前面的操作一样
Student类
public class Student {
public String name;
protected int no;
private boolean sex;
int weight;
public Student() {
}
}
Test
public class FieldTest02 {
public static void main(String[] args){
Student s=new Student();
s.name="xiaoMing";
System.out.println(s.name);
try {
Class c=Class.forName("TTTT.Student");
Object o=c.newInstance();
Field name= c.getDeclaredField("name");
System.out.println(name.get(o));
name.set(o,"Test");
System.out.println(name.get(o));
Field sex= c.getDeclaredField("sex");
sex.setAccessible(true);
sex.set(o,true);
System.out.println(sex.get(o));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}