聊聊Java系列-反射

前言

         我们为什么要学反射呢?因为反射是框架设计得灵魂。那么框架又是什么呢?框架是半成品软件,可以在框架的基础上进行软件开发,简化编码。

一、反射

         概念:将类得各个组成部分封装为其他对象,这就是反射机制

         本质:得到类的class对象后,反向获取对象的各种信息。

         好处:1.可以在程序运行过程中,操纵这些对象。2.可以解耦,提高程序的可扩展性。

 

    如图通过反射在运行时阶段获取字节码对象,通过字节码对象获取对象的方法,从而执行方法

二、获取Class对象的三种方式

     1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。(这种方式多用于配置文件,将类名定义在配置文件中。读取文件,加载类。)
     2.类名.class:通过类名的属性class获取,返回Class对象。(这种方式多用于参数的传递。)
     3.对象.getClass():getClass()方法在Object类定义着,对过对象的getClass(),返回Class对象。(这种方式多用于对象的获取字节码的方式。)

三、Class对象的获取功能

             1.获取成员变量们
             *
Field[] getFields()   :获得某个类的所有的公共(public)的字段,包括父类中的字段。 
             * Field getField(String name) :根据字段名获得某个类的所有的公共(public)的字段,包括父类中的字段。 

             * Field[] getDeclaredFields() :获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
             * Field getDeclaredField(String name) :根据字段名获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

             2.获取构造方法们
             * Constructor<?>[] getConstructors() :获得某个类的所有的公共(public)的构造器。
             * Constructor<T> getConstructor(类<?>... parameterTypes) : 根据形参列表,获得某个类的所有的公共(public)的构造器。

             * Constructor<?> getDeclaredConstructors() :获得某个类的所有声明的构造方法,即包括public、private和proteced。
             * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) :根据形参列表获得某个类的所有声明的构造方法,即包括public、private和proteced。

             3.获取成员方法们:
             * Method[] getMethods() :获得某个类的所有声明的公共(public)的方法。
             * Method getMethod(String name, 类<?>... parameterTypes):根据方法名和形参列表, 获得某个类的所有声明的公共(public)的方法。

             4.获取类名:
             * String getName()

    四、应用场景之写一个框架,在不改变任意类的情况下,可以帮我们创建任意类的对象,并且执行其中任意方法。

      * 实现:
              1.配置文件
              2.反射
      * 步骤:
              1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
              2.在程序中加载读取配置文件
              3.使用反射技术来加载文件进内存
              4.创建对象
              5.执行方法

      首先创建配置文件,用于配置类名与执行的方法名

     然后创建用于验证的学生类与个人类以及简单的框架反射类

    其次再不改变代码的情况下,仅仅改变配置文件的className与methodName,从而达到执行指定类的方法

到此,反射已经聊完,觉得有帮助的给个赞吧,谢谢😄。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值