通过反射访问类中成员

107 阅读1分钟

通过反射机制,访问类中的成员

// 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 +
                '}';
    }
}

运行结果:

image.png