反射机制,是Java语言的一个关键性质,它允许我们在程序运行时,获取类的全部(包括private修饰的)成员变量和成员方法,并能动态地改变这些成员变量和成员方法。下面用一个例子来展示它的基本使用吧!
public class ReflectTest { private boolean flag; private int value = 0; ReflectTest(){ setFlag(false); } private void setFlag(boolean flag) { this.flag = flag; } public void print(){ if(flag){ System.out.println("true"); }else{ System.out.println("false"); } } public void getValue(){ System.out.println(value); } }
public class MyClass { public static void main(String[] args){ try { ReflectTest reflectTest=new ReflectTest(); reflectTest.print(); reflectTest.getValue(); //反射拿到ReflectTest类中的setFlag(boolean flag)方法 Method method=reflectTest.getClass().getDeclaredMethod("setFlag", Boolean.TYPE); method.setAccessible(true);//取消访问检查 method.invoke(reflectTest,true); //传入参数true reflectTest.print(); Field field=reflectTest.getClass().getDeclaredField("value"); field.setAccessible(true); field.set(reflectTest,1); reflectTest.getValue(); } catch (Exception e) { e.printStackTrace(); } } }
通过反射我们就能在外部类中拿到ReflectTest的private方法和变量并修改它们了。