反射机制是指该程序可以在运行时获得自己的信息的信息,即在程序运行时动态加载和获取类的详细信息,以操作类或对象的属性和方法。本质是,在JVM获得类对象之后,它通过类对象进行编译以获取对象的各种信息。反射是Java的特征之一,并且是间接操作目标对象的机制。
班级是反思的基础。要了解反射,我们必须首先了解类别的类别。在程序的运行中,虚拟机维护类型标识符,称为所有对象的运行时类型。此信息跟踪每个对象类的完整结构信息,包括所有权,所有权,拥有的methods and fields等的软件包名称,类名称,实现接口等。您可以通过特殊的Java类访问此信息。此类是CLAS类。您可以将类别类型理解为类类型。类对象称为类类型对象。类对象对应于加载到JVM的.class文件。
首先,JVM会将代码编译到.class intecode文件中,然后按Class Loader(类加载程序)加载到JVM的内存中,并且它将创建一个类别的类对象来存储IT.Object,但类类型对象)。在创建类对象之前,JVM将检查其类是否已加载并找到相应的类对象。如果加载,它将分配内存然后初始化。
加载类后,堆内存的方法区域会产生类对象。该对象包含完整的类结构信息。通过此类对象,您可以看到类的结构,就像镜子一样。因此,它称为:反射。
常见的反射机制
java.lang.class;
java.lang.reflect.constructor;
java.lang.reflect.field;
java.lang.reflect.Method;
java.lang.reflect.modifier;
反射通常使用的API
目的。setAccessible(true);
班级:
获取公共属性:getfield(“属性名称”);
获取私有属性:getDeclaredField(“属性名称”);
通过指定的方法名称获取公共-Fre -Free方法对象:getMethod(“方法名称”,null);
获取所有公共方法:getMethods();
获取所有方法:getDeclaredMethods();
通过指定方法名称获取私有参与方法:getDeclaredMethod(“方法名称”,方法类型参数...);
调用打开的构造函数:getConstructor(构造参数类型);
调用私有所有权:getDeclaredConstructor(构造参数类型);
确定它是否是某个类别的实例:isInstance(obj);
场地:
获取属性名称:getName();
获得属性的类型:getType();
属性的修改:getModifiers();
设置属性值1:要设置的分类对象的参数值:set(obj,obj);
方法:
方法对象
构造函数:
newinstance();//通过结构获取类的实例对象
让我们看一下代码:
getName方法可以打印出类的名称。
通过getfields()方法获得的所有公共成员变量的信息。该方法的反思方法有一个公共成员变量,并且还有一条消息可以获取您声明的所有成员变量:field [] fs= c.getDeclaredFields(),遍历的结果如下:
反射不应用于实际编程,但许多设计与反射机制有关,例如:动态代理机制,JDBC连接到数据库,弹簧/休眠框架