#第三讲 反射
知识点之间是有逻辑关联的,配合在一起构成一个体系。讲了前两次,大家都发觉了会用到一个共同的知识点,叫反射(Reflection)。那么今天我就来给大家讲讲这个反射,也有好几位提出希望进一步了解一下。
这个词的中文翻译不是很好,不容易从字面体会到含义。按照英文词典的解释,Reflection的常用的一个意思是the image of something in a mirror(映照出的影像)。人拿着镜子干什么?是看自己。对,反观自身,就是反射的本质。它是Java语言的一个特性,允许一个执行的程序检查或introspect(内窥)自身或者别的类,并操纵里面的方法和属性。
初看起来,一个运行程序内窥自身,似乎没什么用处,因为一般的理解,程序的作用就是处理外部数据的,只要有功能做一些有用的事情就够了,不需要了解自己。
不过有的场景中,很需要这样的功能。比如在一个图形开发环境中,引入了组件,如何知道组件里面有什么属性和方法?开发环境就需要用反射来识别这些动态引入进来的组件了。还有,我们要做一个框架,比如做Tomcat或者Spring,里面要管理很多对象,自然就需要知道这些对象的内部结构。我十几年前做的R-O Mapping就是用的反射机制构建起来的。
对于写工具写框架平台的程序员来讲,没有反射,都不知道该怎么编程序了。
好,我们先看反射的基本使用,代码如下(SimpleReflection.java):
package com.test;
import java.lang.reflect.Method;
public class SimpleReflectio