1.1、基础概念

反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

“运行状态”,如何理解?

"运行状态"体现了反射的应用场景,当一些类,不需要提前加载进JVM内存,而是在运行时根据需要进行加载的时候,就可以通过反射进行动态加载

1.2、如何理解反射?

学习过java的童鞋,肯定对spring、hibernate一点也不会陌生。在进行底层配置的时候,会涉及到不同类型的数据库问题。例如sqlserver,可能会这样配置方言“org.hibernate.dialect.SQLServer2008Dialect”,而oracle,可以能会这样配置“org.hibernate.dialect.OracleDialect”。不同的数据库,只需要修改配置文件中的方言即可,这就是利用了反射的功能。程序在编译时,并不知道会使用哪种类型的数据库,只有在运行时,动态读取方言的配置,加载相应的类,运行类中定义的方法和属性,从而实现相应的功能。

其实说简单点,反射就是一种机制,可以让你仅知道类的名字的情况下,了解整个类的内部的结构,并且访问内部的成员和方法等

spring中的依赖注入、反转控制使用的都是这种机制

二、反射API及使用

反射机制的实现需要四个类:Class、Constructor、Field、Method

Class类:在程序运行期间,系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行,保存这些信息的类被称为Class

Constructor、Field、Method:分别用于描述类的构造器、域、方法

下面我们用一个简单的例子来演示反射的使用:

package com.my.po;

/**
 * description:{description}
 * author:jyy
 * date:2018-02-06 16:28
 * modify:{modify}
 */
public interface InterFace {
    void read();
}
View Code

相关文章: