<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
    一、執行期根據方法的名稱來執行方法
    下面的示例演示了這一操作:
    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();來代替,原因很明顯如果這個類及方法事先都是清楚的也不需要用reflection了
        假如一個程序在執行的某處的時候才知道需要執行某個方法,這個方法的名稱是在程序的運行過程中指定的 (例如,JavaBean 開發環境中就會做這樣的事),那么上面的程序演示了如何做到。上例中,getMethod 用于查找一個具有兩個整型參數且名為 add 的方法。找到該方法并創建了相應的 Method 對象之后,在正確的對象實例中執行它。執行該方法的時候,需要提供一個參數列表,這在上例中是分別包裝了整數 37 和 47 的兩個 Integer 對象。執行方法的返回的同樣是一個 Integer 對象,它封裝了返回值 84。

    二、執行期創建新的對象

    對于構造器,則不能像執行方法那樣進行,因為執行一個構造器就意味著創建了一個新的對象 (準確的說,創建一個對象的過程包括分配內存和構造對象)。所以,與上例最相似的例子如下:

    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 的還有一個用處就是改變對象數據字段的值。reflection 可以從正在運行的程序中根據名稱找到對象的字段并改變它,下面的例子可以說明這一點:

    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);
           }

       }

    }
    這個例子中,字段 d 的值被變為了 12.34。
    實際開發時用Common BeanUtils

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

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日本一区二区三区| 九月丁香婷婷亚洲综合色| 亚洲人成免费电影| 99re6热视频精品免费观看| 亚洲无码在线播放| 国产激情久久久久影院老熟女免费| 免费一级做a爰片久久毛片潮喷| 色欲色欲天天天www亚洲伊| 午夜电影免费观看| 爱情岛亚洲论坛在线观看 | 亚洲成a人片77777kkkk| 国产成人免费ā片在线观看老同学 | 免费在线黄色网址| 免费人成视频在线播放| 亚洲无码黄色网址| 日韩免费视频一区二区| 亚洲国产精品成人综合久久久| 动漫黄网站免费永久在线观看| 亚洲熟妇无码AV| 亚洲AV日韩精品一区二区三区| 国产精品无码免费专区午夜| 亚洲av永久无码精品网站| 1000部拍拍拍18勿入免费视频下载 | 特级aaaaaaaaa毛片免费视频| 国产亚洲色视频在线| 亚洲免费在线视频| 在线观看亚洲AV每日更新无码| 免费一级一片一毛片| 在线涩涩免费观看国产精品| 亚洲国产精品成人综合久久久| 国产成人免费高清在线观看| 久久免费视频一区| 精品亚洲AV无码一区二区三区| 国产成人免费片在线视频观看| 国产无遮挡无码视频免费软件 | 久久亚洲AV成人无码| 国产又粗又猛又爽又黄的免费视频 | 在线亚洲精品自拍| 97碰公开在线观看免费视频| 噜噜综合亚洲AV中文无码| 亚洲av中文无码乱人伦在线咪咕|