<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0
    一、執(zhí)行期根據(jù)方法的名稱來執(zhí)行方法
    下面的示例演示了這一操作:
    import java.lang.reflect.*;
    public class method2 {
       
    public int add(int a, int b) {
           
    return a + b;
       }

       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("method2");
               Class partypes[] 
    = new Class[2];
               partypes[
    0= Integer.TYPE;
               partypes[
    1= Integer.TYPE;
               Method meth 
    = cls.getMethod("add", partypes);
               method2 methobj 
    = new method2();
               Object arglist[] 
    = new Object[2];
               arglist[
    0= new Integer(37);
               arglist[
    1= new Integer(47);
               Object retobj 
    = meth.invoke(methobj, arglist);
               Integer retval 
    = (Integer) retobj;
               System.out.println(retval.intvalue());
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }

    注:上面劃線的粗體字最好用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 對(duì)象之后,在正確的對(duì)象實(shí)例中執(zhí)行它。執(zhí)行該方法的時(shí)候,需要提供一個(gè)參數(shù)列表,這在上例中是分別包裝了整數(shù) 37 和 47 的兩個(gè) Integer 對(duì)象。執(zhí)行方法的返回的同樣是一個(gè) Integer 對(duì)象,它封裝了返回值 84。

    二、執(zhí)行期創(chuàng)建新的對(duì)象

    對(duì)于構(gòu)造器,則不能像執(zhí)行方法那樣進(jìn)行,因?yàn)閳?zhí)行一個(gè)構(gòu)造器就意味著創(chuàng)建了一個(gè)新的對(duì)象 (準(zhǔn)確的說,創(chuàng)建一個(gè)對(duì)象的過程包括分配內(nèi)存和構(gòu)造對(duì)象)。所以,與上例最相似的例子如下:

    import java.lang.reflect.*;
    public class constructor2 {
       
    public constructor2() {
       }

       
    public constructor2(int a, int b) {
           System.out.println(
    "a = " + a + " b = " + b);
       }

       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("constructor2");
               Class partypes[] 
    = new Class[2];
               partypes[
    0= Integer.TYPE;
               partypes[
    1= Integer.TYPE;
               Constructor ct 
    = cls.getConstructor(partypes);
               Object arglist[] 
    = new Object[2];
               arglist[
    0= new Integer(37);
               arglist[
    1= new Integer(47);
               Object retobj 
    = ct.newInstance(arglist);
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }

    三、改變字段(域)的值

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

    import java.lang.reflect.*;
    public class field2 {
       
    public double d;
       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("field2");
               Field fld 
    = cls.getField("d");
               field2 f2obj 
    = new field2();
               System.out.println(
    "d = " + f2obj.d);
               fld.setDouble(f2obj, 
    12.34);
               System.out.println(
    "d = " + f2obj.d);
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }
    這個(gè)例子中,字段 d 的值被變?yōu)榱?12.34。
    實(shí)際開發(fā)時(shí)用Common BeanUtils

    http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:)
    posted on 2006-01-17 17:41 ronghao 閱讀(582) 評(píng)論(0)  編輯  收藏 所屬分類: j2se基礎(chǔ)
    <2006年1月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進(jìn)。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網(wǎng)站

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品高清国产一久久| 国产亚洲精品精品国产亚洲综合| 亚洲成色999久久网站| 国产伦精品一区二区免费| 亚洲精品一级无码鲁丝片 | 免费一级大黄特色大片| 日韩电影免费在线观看| 国产亚洲精品成人a v小说| baoyu122.永久免费视频| 亚洲人成网站在线观看播放| 中文字幕免费人成乱码中国| 亚洲精品tv久久久久久久久| 久久狠狠躁免费观看| 精品亚洲成a人片在线观看少妇| 国产人成免费视频网站| 亚洲国产视频久久| 国产最新凸凹视频免费| 尤物视频在线免费观看| 国产v亚洲v天堂无码网站| 污污网站免费观看| 亚洲首页国产精品丝袜| 日韩一级免费视频| 中文字幕永久免费| 亚洲黄色网址大全| 日韩高清免费在线观看| 国产成人无码精品久久久久免费| 国产A在亚洲线播放| 亚洲一级毛片免费看| 国产精品成人亚洲| 久久精品国产亚洲AV麻豆王友容| 黄色片在线免费观看| 在线91精品亚洲网站精品成人| 色噜噜AV亚洲色一区二区| 日本xxxx色视频在线观看免费| 亚洲综合色婷婷在线观看| 亚洲日本韩国在线| 91久久精品国产免费直播| 亚洲av永久无码天堂网| 国产成人亚洲综合无码精品| 久久WWW免费人成人片| 成年女人A毛片免费视频|