下面的示例演示了這一操作:


































注:上面劃線的粗體字最好用Object methobj = cls.newInstance();來代替,原因很明顯如果這個(gè)類及方法事先都是清楚的也不需要用reflection了
假如一個(gè)程序在執(zhí)行的某處的時(shí)候才知道需要執(zhí)行某個(gè)方法,這個(gè)方法的名稱是在程序的運(yùn)行過程中指定的 (例如,JavaBean 開發(fā)環(huán)境中就會(huì)做這樣的事),那么上面的程序演示了如何做到。上例中,getMethod 用于查找一個(gè)具有兩個(gè)整型參數(shù)且名為 add 的方法。找到該方法并創(chuàng)建了相應(yīng)的 Method 對象之后,在正確的對象實(shí)例中執(zhí)行它。執(zhí)行該方法的時(shí)候,需要提供一個(gè)參數(shù)列表,這在上例中是分別包裝了整數(shù) 37 和 47 的兩個(gè) Integer 對象。執(zhí)行方法的返回的同樣是一個(gè) Integer 對象,它封裝了返回值 84。
二、執(zhí)行期創(chuàng)建新的對象
對于構(gòu)造器,則不能像執(zhí)行方法那樣進(jìn)行,因?yàn)閳?zhí)行一個(gè)構(gòu)造器就意味著創(chuàng)建了一個(gè)新的對象 (準(zhǔn)確的說,創(chuàng)建一個(gè)對象的過程包括分配內(nèi)存和構(gòu)造對象)。所以,與上例最相似的例子如下:



































三、改變字段(域)的值
reflection 的還有一個(gè)用處就是改變對象數(shù)據(jù)字段的值。reflection 可以從正在運(yùn)行的程序中根據(jù)名稱找到對象的字段并改變它,下面的例子可以說明這一點(diǎn):
























實(shí)際開發(fā)時(shí)用Common BeanUtils
http://www.aygfsteel.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)