• 反射


    一、Java反射描述(即它的作用)的是,在运行状态中:

    1、对于任意一个类,都能够知道这个类的所有属性和方法

    2、对于任意一个类,都能够调用它的任意一个属性和方法

            实际上通过反射,不仅仅可以获知类的属性、方法,还可以获知类的父类、接口、包等信息。

    二、反射原理:我们知道,一个类在加载的时候,会在内存中生成一个代表这个.class文件的java.lang.Class对象,,.classs文件里面就包含了描述这个类的信息的一切内容。

           因此我们想要解剖该类,就首先要获取这类的对应的Class类型对象,使用该类的对应的Class类型对象的方法,就可以对该类进行解剖。说白了就是我们通过反射技术,将类的各种成分映射成一个个的java对象,通过这些对象来动态获取类信息。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    类加载示意如下:

         简单写一下反射技术流程:

    1、获取Class类型对象,三种方法,视情况分别使用:

    1、1  Object ——> getClass(); 

    1、2  任何数据类型(包括基本数据类型)都有一个“静态”的class属性 ;

    1、3   通过Class类的静态方法:forName(String  className)(常用)

    2、通过class对象的方法获取类各种成分的java对象,比如Constrctor、Field对象以及Method对象等

    3、再通过获取到各成分对象各自的方法,来进行动态获取类各组成成分信息。

    三、反射的其他应用:

    1、通过反射运行配置文件内容。需求:我们利用反射和配置文件,可以使:应用程序更新时,对源码无需进行任何修, 我们只需要将新类发送给客户,并修改配置文件即可

    (1)定义一个Student类:

     

    以及一个pro.txt文件,内容如下:

     (2)Demo:

    当我们需求Student类发生改变时,只需要在配置文件pro.txt内修改内容,其他代码都不用动就可以重新适应新需求了

    2、通过反射越过泛型检查:我们知道当定义一个集合时如果指定了集合存储的数据类型,则无法再存储其他数据类型的数据了,否则会报编译错误,如果我们硬要往指定数据类型的集合中添加数据,我们可以利用反射。泛型是用在编译期,编译过后泛型擦除(消失掉)。所以是可以通过反射越过泛型检查的。

     总结:反射很重要,有句话叫反射是框架的灵魂,意思是反射对框架而言的重要性是不言而喻的。使用反射的前提是获取Class类型对象,理解在于类的加载,即但我们创建一个类时,jvm会自动创建.class文件的Class对象(一个类只有这么一个对象,一一对应),通过这个对象来反向获取该类的所有信息。

     

  • 相关阅读:
    关于linux下配置python3的virtualenvwrapper
    python-爬图小样
    C++反汇编学习笔记(五)
    C++反汇编学习笔记(四)
    C++反汇编学习笔记(三)
    OllyDebug调试技巧(三)
    C++反汇编学习笔记(二)
    OllyDebug调试技巧(二)
    OllyDebug调试技巧(一)
    PE结构学习笔记(十一)
  • 原文地址:https://www.cnblogs.com/monkey-yty/p/13124997.html
Copyright © 2020-2023  润新知