反射基本原理

反射的概念:
   在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    对于任意一个类,都能调用它的任意一个方法;
    这种动态获取信息以及动态调用对象的功能成为Java语言的反射机制。


我们写的类在载入内存的时候jvm虚拟机是怎么识别到底哪个是变量,哪个是方法,哪个是修饰符的呢?
          因为java中的Class也是一个对象,那么有对象就有对应的类,当在硬盘中的时候是一个文件,当载入内存的时候就可以看成一个对象。这个Class对象的成员变量就是        Field、Constructor、Method、Modifier,值就是变量名、修饰符、方法名。类里面的field、constructor、method、modifier,在java.lang.reflect中都有这些方法、变量等对应的类,其中有类Field、类Constructor、类Method、类Modifier,有对象就有对应的类。例如,我们写了一个动物类,成员变量有毛色、体重,毛色=红色、体重=70,毛色的值是红色,体重的值是70,这个很好理解。那么,在jvm虚拟机中,java.lang.Class就相当于这个动物类,成员变量就是Field、Constructor、Method、Modifier,值就是变量名、修饰符、方法名。因此我们就可以通过Class对象去获得成员变量的值,也就是我们想要得到的变量名、修饰符列表、方法名等等,这就是反射的基本原理。


Java反射机制能够实现的功能:
    1 在运行时判断任意一个对象所属的类
    2 在运行时构造任意一个类的对象
    3 在运行时判断任意一个类所具有的方法和属性
    4 在运行时调用任意一个对象的方法
    5 生成动态代理
在动态代理中应用的反射最多,可也说有动态代理必有反射。


获取Class类对象有三种方法,这个对象是java.lang.Class类的,
    1 使用Class类的forName()静态方法
      Class c1 = Class.forName("Employee");//"类的全路径"
    

    2 调用某个类的class属性来获取该类对应的Class对象
      每个类都默认具备Class属性,这个属性保存的是它对应那个Class对象的内存地址
      Class c2 = Employee.class;

    3 调用某个对象的getClass()方法
      java中任何一个对象都有getClass()方法,e是运行时类
      Employee e = new Employee();
      Class c3 = e.getClass();

Class类对象获取了之后,我们就可以通过对象获取想要得到的属性,方法,以及对属性的操作等等
这些方法就不一一列出来了,写出来没有什么意义,在Java手册中都有说明,多翻翻手册总是有用处的.

posted @ 2015-08-06 20:00  King_J  阅读(2910)  评论(0编辑  收藏  举报