假设有一个类,类名叫 Example
1.访问私有属性
Class cla = Class.for Name("Example")'
Field field = cla.getDeclaredField("属性名");//得到该属性的field对象
//注意,这里使用的是Declared,因为它才能得到非public的属性
filed.setAccessible(true);//爆破该变量,使其即使不是public的也能被访问
Object o = cla.newInstance();//得到一个Example的对象
field.set(o,修改值);//将o这个对象的field属性修改为传入的修改值
2.调用私有方法
Class cla = Class.forName("Example");
Method method= = cla.getDeclaredMethod("方法名",形参列表的对象);//得到该方法名,该形参列表的Method对象
method.setAccessible(true);//爆破该方法,使其即使不是public的也能被访问
Object obj = cla.newInstance();//得到一个Example的对象
Object retunrValue = method.invoke(obj,实参列表);//调用obj这个对象的method方法,并传入实参,
invoke方法的返回值是一个Object对象,即调用的method方法的返回值,如果method方法的返回值类型是void,则invoke方法返回的是null;
另外:
如果属性和方法是static的,那在
field.set(o,修改值)这里,o可以是null
在method.invoke(obj,实参列表)这里,obj也可以是null
因为static的属性和方法不属于对象而是属于类的,当然,传入一个对象也是可以的,因为用对象也是可以访问static属性和static方法的