A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 进击的大鹏 中级黑马   /  2014-9-17 21:38  /  1351 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5.        反射由来
程序的后期扩展,有程序了,后期需要加内容
Animal a = new Cat();  Animal a = new Dog();
可以实现配置文件,之地类,方法,进行运行
目的,就在于扩展,无源码修改!

6.        反射学习的目的
        获取一个类的class文件对象的方法
        有了class文件后,解剖这个class文件,中文件中直接获取构造方法,普通方法运行起来--反射概念
        获取构造方法运行
        获取成员方法运行
  万物皆对象, .class是对象,描述类 java.lang.Class
  构造方法是对象,描述类 java.lang.reflect.Constructor
  成员变量是对象,描述类 java.lang.reflect.Field
  普通方法是对象,描述类 java.lang.reflect.Method
  
  使用反射中类,技术,实现程序读取配置文件运行

7.        获取一个类的字节码文件对象
        通过类的对象获取
        通过类的静态属性class获取
        通过Class类的静态方法forName(String 类名)获取

8.        获取构造方法,并运行
一个类的class文件中,直接获取构造方法,运行
Class描述class文件对象的类的方法
        Constructor[] getConstructors 获取class文件中的构造方法,只有公共的public权限,获取多个,存储数组
        Constructor getConstructor(Class...c)通过参数列表获取构造方法,想获取什么构造,传递相对应的参数列表
        运行构造方法,找构造方法的描述类Constructor,有可以运行构造方法的方法,返回Object newInstance(Object...o)可变参数,运行方法,传递参数,实际传递参数
        Class类的方法 getDeclaredConstructors()返回一个Constructor数组,可以获取所有构造方法,包括私有
        Class类的方法 getDeclaredConstructor(Class..c)返回一个Constructor类,只有一个构造方法,获取哪一个,传递相对参数列表就可以
        Constructor类的有个父类AccessibleObject类,父类中有一个方法setAccessible(boolean )传递的是true,运行期间,JVM取消程序的访问检查,暴力访问。
        如果类中,有public修饰的,空参数的构造方法,可以简单获取构造方法并运行,一种简化形式,保证类有public的空参数构造.Class类中,有一个方法 newInstance()可以直接运行空参数,public权限的构造方刚发

9.        获取成员方法并运行
  使用Class类的方法,获取一个类的成员方法
        Method[] getMethods()返回字节码文件中的方法,是数组,多个方法,返回public权限的还是继承的或者是实现的方法
        Method getMethod(String方法名,Class...c)返回一个方法,传递方法名和参数列表
        Method类中,有没有方法,可以运行获取到的方法呢,Object类型invoke()运行方法的方法,调用invoke(Object obj,Object...o),调用invoke运行其他方法的,传递对象,和实际的参数
        Method getDeclaredMethod(方法名,参数列表)获取到私有方法
10.        反射通过配置文件运行程序
  需要运行的类,方法,写在配置文件中个,采用键值对存储
  IO读取文件,存储到集合中Properties,反射运行方法
11.        反射绕过编译器检查,将不同的数据类型存储到带有泛型的集合中
考点,不是集合,不是泛型,会使用反射技术

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马