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