今天感覺還是有必要再理解一下 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.aygfsteel.com/Files/wqhtomcat/Java反射機制-javatwo-2004-reflection.rar)。