---------------------- android培训、java培训、期待与您交流! ----------------------
Reflex
* 反射:
* 反射就是把java类中的各种成分映射成相应的java类。例如,一个
* java类中用一个Class类的对象来表示,一个类中的组成部分:成员
* 变量,方法,构造方法,包等等信息也用一个个的java类来表示,
* 就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。
* 表示java类的Class类显然要提供一系列的方法,来获得其中的变量,
* 方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例
* 对象来表示,它们是Field,Method,Constructor,Package等等。
*
* 一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示。
* 通过调用Class类的方法可以得到这些实例的对象后,得到这些实例对象
* 后有什么用呢?怎么用呢?
*
* Constructor类
* Constructor类代表某个类中的一个构造方法
* 得到某个类所有的构造方法:
* 例子:Constructor[] constructors = Class.forName("java.lang.String").getConstructor();
* 得到某一个构造方法:
* 例子:
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
* //获得方法时要用到类型
* 创建实例对象:
* 通常方式:String str = new String(new StringBuffer("abc"));
* 反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc"));
* //调用获得的方法时要用到上面相同类型的实例对象
* Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").class.newInstance();
* 该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
* 该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
*
* 反射的作用-->实现框架功能
* 1,框架与框架要解决的核心问题
* 我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户
* 需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具
* 类被用户的类调用,而框架则是调用用户提供的类。
* 2,框架要解决的核心问题
* 我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的
* 框架程序怎样调用到你以后写的类(门窗)呢?
* 因为在写程序时无法知道要被调用的类名,所以,在程序中无法直接new某个
* 类的实例对象了,而要用反射方式来做。
* 3,综合案例
* 先直接用new语句创建ArrayList和HashSet的实例对象,演示用eclipse自动生成
* ReflectPoint类的equals和hashcode方法,比较两个集合的运行结果差异。
* 然后改为采用配置文件加反射的方式创建ArrayList和HashSet的实例对象,比较
* 观察运行结果差异。
* 引入了eclipse对源文件的管理方式的讲解。
*
* 当一个对象被存储进HashSet集合中后,就不能修改这个对象中的那些参与计算
* 哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值
* 就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去
* HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中
* 单独删除当权对象,从而造成内存泄漏。
---------------------- android培训、java培训、期待与您交流! ----------------------