1.调用外部类的私有方法及获取属性值:
package org.example;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class checkfeflect {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class a = Class.forName("org.example.People");
Object b = a.newInstance();
Method c = a.getDeclaredMethod("man",String.class);
c.setAccessible(true);
System.out.println(c);
System.out.println(c.invoke(b,"11"));
// 获取公有类的私有属性值
}
}
class People{
private String man (String b){
return b;
}
}
输出结果;
private java.lang.String org.example.People.man(java.lang.String)
11
1.调用内部类的私有方法及获取属性值:
package org.example;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class checkfeflect {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class p = Class.forName("org.example.People");
// 获取JAVA私有内部类反射类型
// Class.forName(“外部类完整路径$内部私有类类名”);
Class a = Class.forName("org.example.People$women");
// 获取构造方法
Constructor constructor = a.getDeclaredConstructors()[0];
// getDeclaredConstructors()[0]:是获取当前类和父类的所有方法
constructor.setAccessible(true);
// 创建内部类的实例,需要先创建外部类的实例这里的实例是p
Object f = constructor.newInstance(p.newInstance());
Method g = f.getClass().getDeclaredMethod("get",String.class);
g.setAccessible(true);
System.out.println(g);
System.out.println(g.invoke(f,"22"));
}
}
输出结果:
private java.lang.String org.example.People$women.get(java.lang.String)
22