黑马程序员技术交流社区
标题: 【广州校区】反射初谈 [打印本页]
作者: 天蓬 时间: 2018-1-24 15:53
标题: 【广州校区】反射初谈
反射就是在程序运行过程中,通过.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-类的构造器对象,下期我们再讲如何反射得到类里面的属性与方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |