JAVA反射机制概述

JAVA反射机制概述

  1. Reflection反射:是被视为动态语言的关键,反射机制运行程序在执行期间借助Reflection API获取任何类的内部信息,并能直接操作任何对象的属性及方法。
  2. 反射机制提供的功能
    1. 在运行时判断任意一个对象所属的类
    2. 在运行时能够创建任意一个类的对象
    3. 在运行时能判断任意一个类的成员变量和方法
    4. 在运行时获取泛型信息
    5. 在运行时调用任意一个对象的属性及方法
    6. 在运行时处理注解
    7. 动态代理
  3. 反射主要的API
    1. java.lang.class 代表一个类
    2. java.lang.reflection.Method 代表类的方法
    3. java.lang.reflection.Field 代表类的成员变量
    4. java.lang.reflection.Constructor 代表类的构造器
    5. 。。。。。
  4. 疑问
    1. 直接new和反射应该用哪个:new,体现动态性的时候才用反射
    2. 反射和封装是不是矛盾的:不矛盾,封装解决的是建议你调不调用的问题,反射式能不能调用
  5. 关于java.lang.class类的理解
    1. 类的加载过程:字节码文件加载到内存当中的过程。加载到内存中的类叫做运行时类,这个运行时类就是Class的一个实例
    2. 换句话说,Class的实例就对应着一个运行时类。
  6. 获取Class实例的方法
    1. 通过运行时类的属性.class
    2. 通过运行时类的对象.getClass()
    3. 调用Class的静态方法Class.forName(String classPath)
    4. 使用来的加载器:classloader.loadClass(String classPath)
  7. 哪些类型可以有Class对象
    1. class
    2. 接口
    3. 数组
    4. 基本数据类型
    5. void
    6. 注解
    7. 枚举
  8. 类的加载
    1. 类的加载(load):将类读入内存,创建一个java.lang.Class对象,由加载器完成。
    2. 类的链接(link):将类的二进制数据合并到JVM中,链接将静态变量赋值为初始值
    3. 类的初始化(Initialize):jvm负责对类进行初始化,类构造器()执行,对类变量的赋值和静态代码块,按顺序执行。
  9. 类加载器
  10. 作用:
    将字节码文件加载进内存当中,并将静态数据转换成方法区的运行shi数据结构,在堆中生成一个该类对应的Class对象,作为方法区类数据的访问入口。
  11. 类缓存
    一旦类被加载进类加载器中,它将维持一段时间加载(缓存)一段时间。不过JVM垃圾回收机制可以回收这些Class对象。
  12. classLoader(加载器)
    1. 自定义类使用系统类加载器进行加载(System ClassLoader)
    2. 扩展类使用扩展类加载器进行加载(Extension ClassLoader )
    3. 引导类加载器:java平台核心库(BootStarp ClassLoader)