1.操作私有方法:
这是一个包含私有方法的类Private:
public class Private { private String sayHello(String name) { return "hello: " + name; } }
在另一个类TestPrivate中调用Private中的私有方法sayHello():
public class TestPrivate { public static void main(String[] args) throws Exception { Private p = new Private(); Class classType = p.getClass(); //getDeclaredMethod与getMethod方法不同,getDeclaredMethod返回所有声明的变量, //getMethod只返回public变量. Method method = classType.getDeclaredMethod("sayHello", new Class[] { String.class }); method.setAccessible(true);//压制Java的访问控制检查 String str = (String)method.invoke(p, new Object[]{"zhangsan"}); System.out.println(str); } }
2.操作私有属性
这是一个包含私有属性的类Private1:
public class Private1 { private String name = "zhangsan"; public String getName(){ return name; } }
在另一个类TestPrivate1中修改Private中的私有属性name:
public class TestPrivate1 { public static void main(String[] args) throws Exception { Private1 p = new Private1(); Class classType = p.getClass(); //getDeclaredField与getField的差异同getDeclaredMethod与getMethod Field field = classType.getDeclaredField("name"); field.setAccessible(true);//压制Java对访问修饰符的检查 field.set(p, "lisi"); System.out.println(p.getName()); } }
本文为<北京圣思园Java培训教学视频Java.SE 反射机制大总结>视频笔记