反射机制

java中反射机制

反射是java语言的特征之一,它允许动态地发现和绑定类、方法、字段,以及所有其他的由语言所产生的元素。反射可以做的不仅仅是简单的列举类、字段以及方法,通过反射还能够在运行时完成创建实例、调用方法以及访问字段的工作。反射是java被发现为动态(或准动态)语言的关键。

归纳起来,java反射机制主要提供了以下功能:

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法;

在运行时调用任意一个对象的方法。通过反射甚至可以调用到private的方法;

生成动态代理。


Java反射所需要的类并不多,主要有java.lang.Class类和java.lang.reflect包中的Field、Constructor、Method、Array类。

注意:Class类是Java反射的起源,针对任何一个你想探勘的类,只有先为它产生一个Class类的对象,接下来才能通过Class对象获取其他想要的信息。

JVM为每种类型管理着一个独一无二的Class对象----每个类(型)都有一个Class对象。
Java程序运行过程中,当需要创建某个类的实例时,JVM首先检查所要加载的类对应的Class对象是否已经存在。如果还不存在,JVM就会根据类名查找对应的字节码文件并加载,接着创建对应的Class对象,最后才创建出这个类的实例。

例如,
Java基本数据类型(boolean、byte、char、short、int、long、float 和 double);
关键字void 也都对应一个 Class 对象;
每个数组属性也被映射为 Class 对象,所有具有相同类型和维数的数组都共享该 Class 对象。

因此,运行中的类或接口在JVM中都会有一个对应的Class对象存在,它保存了对应类或接口的类型信息。要想获取类或接口的相应信息,需要先获取这个Class对象。

加载类

Java中有一个Class类用于代表某一个类的字节码。


Class类即然代表某个类的字节码,它当然就要提供加载某个类字节码的方法:forName()。forName方法用于加载某个类的字节码到内存中,并使用class对象进行封装


另外两种得到class对象的方式
类名.class: Manager.class; int.class; double[].class;
对象.getClass()

解剖类

Class对象提供了如下常用方法:
Public Constructor getConstructor(Class<?>... parameterTypes)
Public Method getMethod(String name, Class<?>... parameterTypes)
Public Field getField(String name) public


public Constructor getDeclaredConstructor(Class... parameterTypes)
public Method getDeclaredMethod(String name,Class... parameterTypes)
public Field getDeclaredField(String name)


这些方法分别用于从类中解剖出构造函数、方法和成员变量(属性)。解剖出的成员分别使用Constructor、 Method 、 Field 对象表示。

利用Constructor创建对象

Constructor类提供了如下方法,用于创建类的对象:
public Object newInstance(Object... initargs)
initargs用于指定构造函数接收的参数

利用Method执行方法

Method对象提供了如下方法,用于执行它所代表的方法:

利用Field访问属性

Field对象提供了如下方法,用于设置、获取对象属性的值:


public void set(Object obj,Object value)
public Object get(Object obj)


public Object invoke(Object obj,Object... args)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值