通过反射机制,访问类中的成员
// 1.通过反射机制,访问类中的成员:
Class<?> aClass = Class.forName("reflection_.class_.User");
Object o = aClass.getConstructor().newInstance();
// 2. 获取字段:
Field name = aClass.getDeclaredField("name");
// 3. 暴破
name.setAccessible(true);
Object o1 = name.get(o);
name.set(o,"李四");
Object o2 = name.get(o);
System.out.println(o1);
System.out.println(o2);
反射中如果出现IllegalAccessException异常,可以暴力破解:
name.setAccessible(true);
如果是静态属性: 则 set 和 get 中的o对象可以为 null;
Field job = aClass.getDeclaredField("job");
Object o3 = job.get(null);
System.out.println(o3);
job.set(null,"医生");
System.out.println(job.get(null));
代码如图所示:
class User{
private String name = "张三";
private int age;
public static String job = "程序员";
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User(String name) {
this.name = name;
}
private User(int age){
this.age = age;
}
public void hi(){
System.out.println("嗨。");
}
private void hello(){
System.out.println("哈喽。");
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
运行结果: