反射就是在程序运行过程中,通过.class文件动态的获取类的信息(属性,构造,方法),并调用 作用: 开发IDE(集成开发环境) 框架开发或框架学习(Struts,Spring,Hibernate) SSH三大框架 反射主要的组成:class,Constructor,Field,Method; class代表的类对象,(最先使用后面三个才可以用) Constructor-类的构造器对象, Field-类的属性对象, Method-类的方法对象 (反射的第一步而且还是必须的一步)获取类Class对象 Class.forName("类全名");
对象名.getClass();
类名.class 推荐使用:Class.forName("类全名");因为可以避免出现同名而弄错的情况 反射之获取public构造方法并创建对象 Class类获取public构造方法的方法 * public Constructor<?>[] getConstructors() * 获取所有的`public`修饰的构造方法以数组的形式返回。 * Constructor 用来描述构造方法的类。 * public Constructor<T> getConstructor(Class<?>... parameterTypes) * 获取指定参数的`public`构造方法。 * 不传参数得到的就是无参构造方法。 `Constructor`类创建对象方法 * `public T newInstance(Object... initargs) ` * 指定参数创建对象,没有参加表示使用无参构造方法创建。 * 获取步骤 * 获得Class对象。 * 获得指定的公共的构造方法。 * 通过构造方法类Constructor中的方法newInstance创建对象。
反射之获取private构造方法并创建对象 Class获得私有构造方法的方法 * public Constructor<?>[] getDeclaredConstructors() * 获取所有的构造方法(包含私有的)以数组的形式返回。 *public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) * 获取指定参数类型所对应的构造方法(包含私有的)。 * 调用私有构造方法 * public void `setAccessible`(boolean flag) * 将此对象的accessible设置为true表示取消运行时期的权限检查。 * public T newInstance(Object... initargs) * 指定参数创建对象。 * 获取步骤 * 获得Class对象。 * 获得指定的私有构造方法。 * 暴力访问, 通过setAccessible(boolean flag)方法(如果没有写这个方法就会出现图一的情况) * 通过构造方法类Constructor中的方法newInstance创建对象。 图一:告诉你这个方法是私有的不能随便获取 正确完整情况: 一般都不推荐暴力反射得到私有构造方法的,因为这样会破坏了程序的封装性,安全性。 现在看反射好像没什么用,而且获取创建对象很麻烦,但是在后期的作用是很有用的,尤其想在java走的更远,这期只讲class代表的类对象,Constructor-类的构造器对象,下期我们再讲如何反射得到类里面的属性与方法
|