pojo.Person:
package pojo;
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(无参数)执行");
}
}
test.TestField:
package test;
import java.lang.reflect.Field;
public class TestField {
public static void main(String[] args) throws Exception {
//获取字节码文件中字段getDeclaredField,能取出所有权限的字段
String classname = "demo.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);
}
}
运行结果:

该博客探讨了Java中的反射机制,通过`Class.forName()`加载类并使用`getDeclaredField()`获取私有字段。文章详细展示了如何利用反射创建对象、访问并修改私有字段的值,强调了`setAccessible(true)`在访问控制上的作用。
3499

被折叠的 条评论
为什么被折叠?



