反射

Posted on 2023-06-20 22:26  liuxin6de1b  阅读(12)  评论(0编辑  收藏  举报

1反射定义:
背景:Idea中获取某个类中的所有方法的提示就是利用反射的机制实现的 反射机制定义:
(1)动态获取对象信息(成员变量,成员方法,构造方法)
(2)调用对象的信息(成员变量,成员方法,构造方法) 2反射编程核心思想:
获取class类型的对象(字节码对象)
通过字节码对象获取成员方法,成员变量,构造方法

2通过反射获取自定义类class类型的对象

第一步:准备工作 

先新建一个Demo类,对类中的属性进行封装

第二步:获取Class类型的对象

第一种方式:Class aclass=Class forName(“
Demo类的路径 ”)sout(aclass)
Class forName是查找并加载的意思
第二种方式:Class aclass=Demo.class
第三种方式:Demo demo=new Demo();
                     Class aclass=demo.getClass();

第二步:通过反射获取内置类的class对象     

第一种方式:Class aclass=Class.forName("java.util.Date")       

第二种方式Class aclasss=Thread .getClass 

第三种方式 Date date=new Date()Class aclass =date . getClass();

第三步:反射获取构造方法

先获取Class类型的字节码对象  Class aclass=Class. forName(" ")       

 通过class类型的字节码对象调用getConstructors()

获取构造方法 Constructor[]  co=aclass. getConstructors(); 

现在co就是构造方法,可以遍历获取所有的的构造方法                                                       

for(int i=0;i<co.length;i++){sout (co[i])}

第四步:

反射获取成员变量 先获取Class类型的字节码对象
Class aclass=Class. forName(" ")
利用declaredFields获取成员变量
Fields [] df=aclass.getDeclared0Fields() 利用for循环输出所有成员变量
for(int i=0;i<df.length;i++){sout (df [i])}

也可以单独输出某一个变量: 获取变量名为name的变量
Field ageField=aclass.getDeclaredField("name")
ageField.getName()获取变量名
ageField.getType()获取变量类型

第五步:反射获取成员方法
先获取Class类型的字节码对象
Class aclass=Class. forName(" ")

利用declaredMethods可以获取Class类型的字节码对象的成员方法
Method[]dm=aclass.getDeclaredMethods();
利用for循环遍历成员方法列表

for(int i=0;i<dm.length;i++){sout(dm[i]) }

 

Copyright © 2024 liuxin6de1b
Powered by .NET 9.0 on Kubernetes