1、创建一个被调用的类
/**
* @version 1.0
* @Author F-llin
* @Date 2020-12-04 13:53
*/
public class Bean{
private String userid;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserid() {
return userid;
}
private void privetaMethod(String str){
System.out.println("this is privetaMethod to:" + str);
}
@Override
public String toString() {
return "Bean{" +
"user='" + userid + '\'' +
", name='" + name + '\'' +
'}';
}
}
2、使用反射调用私有方法
// 1:通过Class的静态方法forName加载
Class aClass=Class.forName("Bean");
// 实例化对象的方法
Object o1 = aClass.newInstance();
Method m = aClass.getDeclaredMethod("privetaMethod", String.class);
// 在访问私有方法前设置访问操作
m.setAccessible(true);
m.invoke(o1, "来了老弟1");
// 2:通过new加载
Bean b2 = new Bean();
Class extends Bean> aClass2 = b2.getClass();
Method m2 = new Bean().getClass().getDeclaredMethod("privetaMethod", String.class);
// 在访问私有方法前设置访问操作
m2.setAccessible(true);
m2.invoke(b2, "来了老弟2");
运行结果:
this is privetaMethod to:来了老弟1
this is privetaMethod to:来了老弟2
// 在类的外部通过反射调用私有方法会破坏封装性如不是必要操作或设计需求,不建议这样做。