今天感觉还是有必要再理解一下 Java Reflection

在说 Reflection 之前,我感觉还是先对静态语言和动态语言有一个了解比较好,下面来看一下一些资料:

 

1 http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html 说明了什么是静态的,什么是动态的,总结一下就是:

 

动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的 ECMAScript(JavaScript) 便是一个动态语言。除此之外如 Ruby Python 等也都属于动态语言,而 C C++ 等语言则不属于动态语言。(通俗的说法就是:静态的是事先进行规划,考虑到后面需要做的一些事情;而动态的是管他后面会是怎么样呢,先开始再说,要的就是速度,呵呵,这有点和我们生活中做人做事的方式有些相似 ~

 

2 http://www.javaeye.com/topic/35763 对动态语言和静态语言的一个比较新颖的认识,主要从内存的分配和利用情况来说的,也就是说:动态语言不事先分配内存,到用的时候再说,而静态语言会先分配内存,并进行检查,大了放不下啊,呵呵

 

3 http://robbin.javaeye.com/blog/33971 讨论了静态语言和动态语言在开发方面的优势和使用情况等,还在讨论中,不好定论。

 

注:一般来说,静态语言比较容易调试,而动态语言不太容易调试,因为变数太多,呵呵。

 

由于静态语言不够灵活,再加上现在随着系统的扩大,以及框架建立的需要,所以说静态语言也需要越来越多的动态的特性,而作为现在首当其冲的 Java 语言,也要通过反射,在执行期间做一些动态的调整以适应多变的需求。

 

Reflection 机制中,最重要的一个类就是 Class 类,这里面记录了我们所定义的 class 中的一些信息,我们可以通过其获得我们定义的 变量、方法、构造函数以及父类等等,并且可以动态的对其进行调用,这样就可以在某些时候将我们没有事先设计的代码在运行期间执行,而不对原有的程序进行改变。

 

具体的使用样例可以参考: Core Java 2 第六、七版,或者侯捷的 java Reflection 教程(下载地址:http://www.blogjava.net/Files/wqhtomcat/Java反射机制-javatwo-2004-reflection.rar)。