1.反射的概述
反射(Reflection)机制是Java语言特性之一,是Java被视为动态(或准动态)语言的一个关键特性;
JAVA反射机制是在【运行状态】中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的本质理解,就是获取该类的class对象(类类型 class type)后,反向获取该类对象的各种信息
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。
2.Java反射常用API
使用反射技术,常用的类如下。
(1) java.lang.Class<T>类:反射的核心类,反射所有的操作都是围绕该类来生成的。通过Class类可以获取类的属性,方法等内容信息
(2) java.lang.reflect.Constructor<T>类:表示类的构造方法
(3) java.lang.reflect.FieId类:表示类的属性,可以获取和设置类中属性的值
(4) java.lang.reflect.Method类:表示类的方法,可以用来获取类中方法的信息或执行方法
3.反射的应用
在Java中使用反射的基本步骤如下
(1) 导入java.lang.reflect包中的相关类
(2) 获得需要操作的类的Class实例
(3) 调用Class的实例的方法获取Field,Method等实例
(4) 使用反射API操作实例成员
获取Class实例
Java程序中获得Class实例通常有如下3种方式,可根据实际情况灵活选择。
1.调用类或接口实例的getClass()方法
Class clz = obj.getClass(); // obj为某个类型的实例
2.调用类或接口的class属性
Class clz = Student.Class; // Student 为自定义的学生类型
3.使用Class.forName()方法
Class clz = Class.forName("com.mysql.cj.jdbc.Driver");
从Class实例获取信息
在获取到某个类型对应的Class实例之后,就可以调用Class实例的方法来获取信息。
方法
说明
String getName()
以字符串形式返回该类型的名称
String
getSimpleName()
以字符串形式返回该类型的简称
Package getPackage()
获取该类型所在的包
Class getSuperclass()
返回该类型的超类的Class实例
ClassI getInterfaces()返回该类型所实现的全部接口的Class实例
int getModifiers()
返回该类型的所有修饰符,由public,protected,private,final,staic,abstract等对应的int常量组成, 返回的整数应使用Modifier工具类来解
码,才可以判断修饰符的构成
ClassI
getDeclaredClasses()
返回该类型中包含的全部内部类的Class实例
Class
getDeclaringClass()
返回该类型所在的外部类的Class实例
8319

被折叠的 条评论
为什么被折叠?



