Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
实现反射机制的类
Java中主要由以下的类来实现Java反射机制(这些类都位于java.lang.reflect包中):
- Class类:代表一个类。 Field类:代表类的成员变量(成员变量也称为类的属性)。
- Method类:代表类的方法。
- Constructor类:代表类的构造方法。
- Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
意义
首先,反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力。
其次,通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类。
再次,使用反射机制能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法。
最后,反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中。
一,什么是类加载器
类加载器器:负责将.class文件(存储的物理文件)加载到内存中
类加载时机:
1,创建类的实例(对象)
2,调用类的方法
3,访问类或者接口的类变量,或者为该类变量赋值
4,使用反射方式来强制创建某个类或接口对应的java.lang.class对象
5,初始化某个类的之类
6,直接使用java.exe命令来运行某个主类
用到就加载,不用不加载
二,类加载器的过程
1,加载:通过报名+类名,获取这个类,准备用流进行传输,将这个类加载到内存中,加载完毕创建一个class对象
2,验证:文件中的信息是否符合虚拟机规范,有没有安全隐患
准备:初始化静态变量
解析:本类中如果用到其他类,此时就需要找到对应的类
3,初始化:静态变量赋值以及初始化其他资源
三,类加载器的分类
启动类加载器(BootstrapClassLoader):虚拟机内置的类加载器
平台了加载器(PlatformCladdLoader):负责加载JDK中一些特殊的模块
系统类加载器(SystemClassLoader):负责加载用户类路径上所指定的类库