今天感覺(jué)還是有必要再理解一下 Java Reflection 。
在說(shuō) Reflection 之前,我感覺(jué)還是先對(duì)靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言有一個(gè)了解比較好,下面來(lái)看一下一些資料:
1 、 http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html 說(shuō)明了什么是靜態(tài)的,什么是動(dòng)態(tài)的,總結(jié)一下就是:
動(dòng)態(tài)語(yǔ)言,準(zhǔn)確地說(shuō),是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn),已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化。比如眾所周知的
ECMAScript(JavaScript)
便是一個(gè)動(dòng)態(tài)語(yǔ)言。除此之外如
Ruby
、
Python
等也都屬于動(dòng)態(tài)語(yǔ)言,而
C
、
C++
等語(yǔ)言則不屬于動(dòng)態(tài)語(yǔ)言。(通俗的說(shuō)法就是:靜態(tài)的是事先進(jìn)行規(guī)劃,考慮到后面需要做的一些事情;而動(dòng)態(tài)的是管他后面會(huì)是怎么樣呢,先開始再說(shuō),要的就是速度,呵呵,這有點(diǎn)和我們生活中做人做事的方式有些相似
~
)
2
、
http://www.javaeye.com/topic/35763
對(duì)動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言的一個(gè)比較新穎的認(rèn)識(shí),主要從內(nèi)存的分配和利用情況來(lái)說(shuō)的,也就是說(shuō):動(dòng)態(tài)語(yǔ)言不事先分配內(nèi)存,到用的時(shí)候再說(shuō),而靜態(tài)語(yǔ)言會(huì)先分配內(nèi)存,并進(jìn)行檢查,大了放不下啊,呵呵
3
、
http://robbin.javaeye.com/blog/33971
討論了靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言在開發(fā)方面的優(yōu)勢(shì)和使用情況等,還在討論中,不好定論。
注:一般來(lái)說(shuō),靜態(tài)語(yǔ)言比較容易調(diào)試,而動(dòng)態(tài)語(yǔ)言不太容易調(diào)試,因?yàn)樽償?shù)太多,呵呵。
由于靜態(tài)語(yǔ)言不夠靈活,再加上現(xiàn)在隨著系統(tǒng)的擴(kuò)大,以及框架建立的需要,所以說(shuō)靜態(tài)語(yǔ)言也需要越來(lái)越多的動(dòng)態(tài)的特性,而作為現(xiàn)在首當(dāng)其沖的 Java 語(yǔ)言,也要通過(guò)反射,在執(zhí)行期間做一些動(dòng)態(tài)的調(diào)整以適應(yīng)多變的需求。
在 Reflection 機(jī)制中,最重要的一個(gè)類就是 Class 類,這里面記錄了我們所定義的 class 中的一些信息,我們可以通過(guò)其獲得我們定義的 變量、方法、構(gòu)造函數(shù)以及父類等等,并且可以動(dòng)態(tài)的對(duì)其進(jìn)行調(diào)用,這樣就可以在某些時(shí)候?qū)⑽覀儧](méi)有事先設(shè)計(jì)的代碼在運(yùn)行期間執(zhí)行,而不對(duì)原有的程序進(jìn)行改變。
具體的使用樣例可以參考: Core Java 2 第六、七版,或者侯捷的 java Reflection 教程(下載地址:http://www.aygfsteel.com/Files/wqhtomcat/Java反射機(jī)制-javatwo-2004-reflection.rar)。