关于java的反射机制--理论介绍

关于java的反射机制--理论介绍

  • 使用目的:

    通过外部文件配置,在不修改原码的情况下控制程序,此功能符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能)

  • 基本介绍:

    反射机制允许程序在执行期借助ReflectionAPI取得任何类的内部信息(属性,构造器,方法……)并能操作对象的属性及方法,反射在设计模式和框架底层都可以用得到。

    加载完类之后在堆中就会产生一个Class对象,这个对象包含了类的完整结构信息。

    这个对象就像是一面镜子,透过此对象可以看到类的结构,故形象的称之为反射(看到一句有意思的话:反射这种机制与物理意义上的反射有着本质的不同,不应该称之为反射,应该叫反思。)

    反射充分体现了java是面向对象语言的特征

    反射中我们将一切都视为对象---->类,方法,属性都看作对象。这些对象也有着自己的方法。

    反射是动态加载类的

    动态加载(延时加载):运行时加载需要的类,如果运行时不需要该类则不进行加载,依赖性弱。

    ​ 程序中使用了此类,但并没有创建此类,动态加载:在运行时若不需要此类则不会报错。

    静态加载:编译时加载相关的类,若没有相关的类则会报错,依赖性强。

  • Class类

    class类是反射中的一个核心类,该类表示的是类或接口的字节码对象。

    注:此处的Class并不是我们传统意义上的Class类

    ​ 解释:我们在写java代码时,会创建不同的类给其命名并new对象再调用其中的方法。比如说,我们创建一个Person类、User类、Son类,我们将其统称为类(Class),Person、User、Son便是这些类的类名,这里Class充当的角色就是User,Person,它只是一个类名,名称叫做Class.

  • 计算机执行java程序:

    计算机执行java程序分为三个阶段:编译阶段-->类加载阶段-->运行阶段

    编译阶段:将我们java程序中的类编译为字节码文件,此字节码文件中包括这个类的属性、方法、构造器等一些信息

    类加载阶段:通过类加载器将编译阶段生成的字节码文件,生成了一个Class对象并放在了堆中。

    此阶段便体现了反射

    运行阶段:

    注:对象有一个特别重要的特性:能够记住它是属于哪个类的。

    java反射机制在运行阶段可做的事:

    1. 判断一个对象所属的类,
    2. 构造任意一个类的对象
    3. 得到一个类所具有的成员变量和方法。
    4. 调用任意一个对象的成员变量和方法。
  • 反射相关主要的类

    java.long.class 反射的一个核心类

    java.long.reflect.Method 方法类

    java.long.reflact.Field 属性类

    java.long.reflect.Constructor 构造器类

  • 反射的优缺点

    优点:可以动态的创建和使用对象(框架底层的核心),使用灵活,没有反射机制,框架技术将失去底层支撑。

    缺点:使用反射机制是解释执行,对执行速度有影响。

posted on 2021-05-27 22:12  凡人精灵  阅读(59)  评论(0编辑  收藏  举报

导航