反射

来源:互联网 发布:数据库基础 编辑:程序博客网 时间:2024/05/22 17:30

注:本文为阅读《疯狂Java讲义》第3版(李刚)一书后的学习笔记, 特此说明。


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

获得Class对象

每个类在被加载之后,系统都会为该类生成一个对应的Class对象,通过该对象就可以访问到JVM中的这个类。在Java程序中获取Class对象通常有如下三种方式:

这里写图片描述

从Class中获取信息

Class类提供了大量的实例方法来获取该Class对象所对应类的详细信息。

这里写图片描述


===============================================================================

使用反射生成并操作对象

创建对象

通过反射来生成对象有如下两种方式:

这里写图片描述

调用方法

每个Method对象对应一个方法,获得Method对象后,程序就可通过该Method来调用它对应的方法。在Method里包含一个invoke()方法,该方法的签名如下:

这里写图片描述

当通过Method的invoke()方法来调用对应的方法时,Java要求程序必须有调用该方法的权限。所以如果程序需要调用某个对象的private方法,可以先调用Method对象的setAccessible(boolean flag)方法。

访问成员变量

Field提供了如下两组方法来读取或设置成员变量的值:

这里写图片描述

当通过Field访问成员变量时,Java要求程序必须有访问该成员变量的权限。所以如果程序需要调用某个对象的private成员变量,可以先调用Field对象的setAccessible(boolean flag)方法。


  1. http://baike.xsoftlab.net/view/209.html#1 ↩
0 0