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]) }