文件结构:
Person:
package demo2;
public class Person {
private int age;
private String name;
public Person( String name,int age) {
this.age = age;
this.name = name;
System.out.println("构造函数Person(有参数)执行");
}
public Person() {
System.out.println("构造函数Person(无参数)执行");
}
}
package Main;
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws Exception {
//获取字节码文件中字段getDeclaredField (能取出所有权限的字段)
String classname = "demo2.Person";
//寻找名称的类文件,加载进内存 产生class对象
Class cl = Class.forName(classname);
//获取Person类中的 private String name 字段
Field field_age = cl.getDeclaredField("age");
//打印
System.out.println(field_age);
//创建一个新的Person对象 (无参执行)
Object obj = cl.newInstance();
//对私有字段访问取消权限检查。 暴力访问
field_age.setAccessible(true);
//获取新对象里的私有字段age的值
Object age_val = field_age.get(obj);
//输出私有字段age的值
System.out.println("private age :"+age_val);
//对私有字段赋值
field_age.set(obj, 28);
//在此获取私有字段字段age的值
age_val=field_age.get(obj);
//输出私有字段的值
System.out.println("private age :"+age_val);
}
}
运行结果: