1. 创建测试的私有对象
public class Person {
private int age = 5;
private String name;
private Person(){}
private String test(String name){
System.out.println("name: "+name);
return "test";
}
}
2. 获取私有对象中的属性和方法
public class Test {
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class clazz = Person.class;
Constructor c = clazz.getDeclaredConstructor();
c.setAccessible(true);
Person person = (Person) c.newInstance();
Field age = clazz.getDeclaredField("age");
age.setAccessible(true);
System.out.println(age.getName() + " = " + age.get(person));
age.set(person, 18);
System.out.println(age.getName() + " = " + age.get(person));
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
String name = f.getName();
Object o = f.get(person);
System.out.println(name + " - " + o);
}
Method[] methods = clazz.getDeclaredMethods();
for (Method m : methods) {
m.setAccessible(true);
String name = m.getName();
Object invoke = m.invoke(person, "张三");
System.out.println(name + " = "+invoke);
}
}
}