今天感覺還是有必要再理解一下 Java Reflection

在說 Reflection 之前,我感覺還是先對靜態(tài)語言和動態(tài)語言有一個了解比較好,下面來看一下一些資料:

?

1 http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html 說明了什么是靜態(tài)的,什么是動態(tài)的,總結(jié)一下就是:

?

動態(tài)語言,準(zhǔn)確地說,是指程序在運(yùn)行時可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn),已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化。比如眾所周知的 ECMAScript(JavaScript) 便是一個動態(tài)語言。除此之外如 Ruby Python 等也都屬于動態(tài)語言,而 C C++ 等語言則不屬于動態(tài)語言。(通俗的說法就是:靜態(tài)的是事先進(jìn)行規(guī)劃,考慮到后面需要做的一些事情;而動態(tài)的是管他后面會是怎么樣呢,先開始再說,要的就是速度,呵呵,這有點(diǎn)和我們生活中做人做事的方式有些相似 ~

?

2 http://www.javaeye.com/topic/35763 對動態(tài)語言和靜態(tài)語言的一個比較新穎的認(rèn)識,主要從內(nèi)存的分配和利用情況來說的,也就是說:動態(tài)語言不事先分配內(nèi)存,到用的時候再說,而靜態(tài)語言會先分配內(nèi)存,并進(jìn)行檢查,大了放不下啊,呵呵

?

3 http://robbin.javaeye.com/blog/33971 討論了靜態(tài)語言和動態(tài)語言在開發(fā)方面的優(yōu)勢和使用情況等,還在討論中,不好定論。

?

注:一般來說,靜態(tài)語言比較容易調(diào)試,而動態(tài)語言不太容易調(diào)試,因為變數(shù)太多,呵呵。

?

由于靜態(tài)語言不夠靈活,再加上現(xiàn)在隨著系統(tǒng)的擴(kuò)大,以及框架建立的需要,所以說靜態(tài)語言也需要越來越多的動態(tài)的特性,而作為現(xiàn)在首當(dāng)其沖的 Java 語言,也要通過反射,在執(zhí)行期間做一些動態(tài)的調(diào)整以適應(yīng)多變的需求。

?

Reflection 機(jī)制中,最重要的一個類就是 Class 類,這里面記錄了我們所定義的 class 中的一些信息,我們可以通過其獲得我們定義的 變量、方法、構(gòu)造函數(shù)以及父類等等,并且可以動態(tài)的對其進(jìn)行調(diào)用,這樣就可以在某些時候?qū)⑽覀儧]有事先設(shè)計的代碼在運(yùn)行期間執(zhí)行,而不對原有的程序進(jìn)行改變。

?

具體的使用樣例可以參考: Core Java 2 第六、七版,或者侯捷的 java Reflection 教程(下載地址:http://www.aygfsteel.com/Files/wqhtomcat/Java反射機(jī)制-javatwo-2004-reflection.rar)。