//反射第一步,首先需要获得字节码对象 Class<SecretPerson> secretPersonClass = SecretPerson.class; //为了创建对象,获取构造函数 //通过字节码对象获取到构造函数 Constructor<SecretPerson> c = secretPersonClass.getDeclaredConstructor();//获取私有构造函数 c.setAccessible(true);//暴力反射 //获取到对象 SecretPerson sp = c.newInstance(); //给成员变量赋值 Field nameFiled = secretPersonClass.getDeclaredField("name"); Field ageFiled = secretPersonClass.getDeclaredField("age"); //成员变量都是私有化,使用暴力反射获取私有成员变量 nameFiled.setAccessible(true);//暴力反射 ageFiled.setAccessible(true);//暴力反射 nameFiled.set(sp,"张三");//给成员变量赋值 ageFiled.set(sp,19);//给成员变量赋值 sp.manageFile();//调用public的方法 //通过字节码对象获取私有的方法 Method travelWithBoss = secretPersonClass.getDeclaredMethod("travelWithBoss", String.class, String.class, String.class); travelWithBoss.setAccessible(true);//调用了私有方法,使用暴力反射 travelWithBoss.invoke(sp,"王大爷","泰国","看人妖表演"); } //定义类和方法
public class SecretPerson { private String name; private int age; private SecretPerson() { } private SecretPerson(String name, int age) { this.name = name; this.age = age; } public void manageFile() { System.out.println(name + "正在整理资料"); } private void travelWithBoss(String bossName, String address, String something) { System.out.println(name + "陪" + bossName + "去" + address + something); } @Override public String toString() { return "SecretPerson{" + "name='" + name + '\'' + ", age=" + age + '}'; } }