目录
一、定义
Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有方法和属性;对于任意一个对象,都能够使用这个对象的所有方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
二、用途
1. 在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量,方法或是属性是私有的或是只对系统应用开放,这时候可以利用 Java 的反射机制通过反射来获取所需的私有成员或方法。
2.反射最重要的用途就是开发各种通用框架,比如在 Spring 中,我们将所有的类 Bean 交给Spring 容器管理,无论是 XML 配置 Bean 还是注解配置,当我们从容器中获取 Bean 来依赖注入时,容器会读取配置,而配置中给的就是类的信息,Spring 根据这些信息,需要创建哪些 Bean ,Spring 就动态创建这些类。
三、反射基本信息
Java 程序中许多对象在运行时会出现两种类型:运行时类型(RTTI)和编译时类型,例如 Person p = new Student(); 这句代码中在编译时类型为 Person ,运行时类型为 Student 。程序需要运行时发现对象和类的真实信息。而通过使用反射程序就能判断出该对象和类属于哪些类。
四、反射相关的类
类名 | 用途 |
Class类 | 代表类的实体,在运行的Java应用程序中表示类和接口 |
Field类 | 代表类的成员变量/类的属性 |
Method类 | 代表类的方法 |
Constructor类 | 代表类的构造方法 |
4.1 Class类(反射机制的起源)
代表类的实体,在运行的Java应用程序中表示类和接口 。
Java文件被编译后,生成 .class 文件,JVM此时就要去解读 .class 文件,被编译后的java文件 .class 文件也被 JVM 解析为一个对象,这个对象就是 java.lang.Class 。这样当程序在运行时,每个 java文件就最终变成了 Class 类对象的一个实例。我们通过 Java 的反射机制应用到这个实例,就可以去获得甚至去添加改变这个类的属性和动作,使得这个类成为一个动态的类。
4.1.1 Class类中的相关方法
- 常用获得类相关的方法
方法 | 用途 |
getClassLoader() | 获得类的加载器 |