反射(Reflection)机制是java语言特性之一,是java被视为动态(准动态)语言的一个关键特性。
什么是反射
在计算机领域,反射指一种能力,能够自描述和自控制,即在运行状态
中,动态获取类信息及动态调用实例方法的能力。
java反射的动态特性:
1.运行时创建实例
2.运行期间调用方法
3.运行时更改属性
怎么理解java的反射机制?先想一下java程序的执行过程,如下图(java程序的执行过程图)。java程序想要运行,java类必须被java虚拟机加载。
之前我们所运行的程序都是在编译时就已经链接了所有所需的类,而java反射机制则允许程序在运行时再加载、探知、使用那些在编译时完全未知的类。例如,在使用JDBC时,使用Class.forName()方法通过一个字符串形式的类名查找并加载驱动类,就是对反射机制的初步运用。
每个项目中使用的数据库产品和版本都不是一成不变的,在代码中用new关键字实例化驱动类的传统做法是不明智的,而利用反射机制则可以在运行时读取配置文件中的驱动类名,动态加载所需的驱动类。
反射机制允许java程序加载一个运行时才得知其名称的类,获悉其完整API信息,包括其修饰符(比如Public、static等)、超类、实现的接口,也包括属性和方法的所有信息;并可以生成其实例、对其属性赋值或调用其方法。
通过java反射可以实现以下功能
1、在运行时探知任意一个实例所属的类
2、在运行时构造任意一个类的实例
3、在运行时探知任意一个类所具有的方法和属性
4、在运行时调用任意一个实例的方法
就像是在照镜子一样能够看清自己,反射使程序可以看清一个类的情况并加以使用。java反射机制能够探知类的基本结构,这种对java类结构探知的能力,称为java类的“自审”。并且,反射机制是构建框架技术的基础所在,掌握java反射机制,对以后学习框架技术有很大的帮助。
java反射常用API
使用java反射技术,常用的类如下:
1、java.lang.Class<T>类:反射的核心类,反射所有的操作都是围绕该类来生成的。通过Class类可以获取类的属性、方法等内容信息
2、java.lang.reflect.Constructor<T>类:表示类的构造方法
3、java.lang.reflect.Field:表示类的属性,可以获取和设置类中属性的值
4、java.lang.reflect.Method类:表示类的方法,可以用来获取类中方法的信息或执行方法