反射是种机制,是动态的获取开启反射的类的构造方法,成员属性和方法的一种功能
动态:编译期编译.class时程序未确定什么类开启反射,要在运行时执行固定方法才可以开启
开启反射一般有三种方法,1,对象.getClass();2,类.class;3,Class.forname(对象的路径);
以上三种方法都可以得到一个反射中的Class对象,通过这个对象get可以得到构造方法,成员属性和方法。当使用declared之后可以无视修饰符获取本类所有的构造方法/成员属性/方法。其中,构造方法只能获取本类的,成员属性和方法可以获得超类的。
当获得构造方法后可以.newInstance();方法来创造一个反射类实例
当获得指定成员变量之后可以字段.set(实例对象,值)来使用。私有变量需要暴力破解才可以赋值字段.setAccessible(true);
当获得指定方法之后可以方法.invoke(实例对象,参数)来使用,此处和动态代理相通,动态代理就是通过反射机制来实现的。