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

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

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

    posts - 297,  comments - 1618,  trackbacks - 0
    一. 反射機制描述
          Java的反射機制允許程序在運行時透過反射API取得任何一個已知名稱的class的內(nèi)部信息,主要包括屬性名,屬性名的修飾符,方法名,方法返回值,方法修飾符等信息。

    二. Java類反射中的主要方法
         Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數(shù)類型的公共構(gòu)造函數(shù),

         Constructor[] getConstructors() -- 獲得類的所有公共構(gòu)造函數(shù)

         Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數(shù)類型的構(gòu)造函數(shù)(與接入級別無關)

         Constructor[] getDeclaredConstructors() -- 獲得類的所有構(gòu)造函數(shù)(與接入級別無關) 

         獲得字段信息的Class 反射調(diào)用不同于那些用于接入構(gòu)造函數(shù)的調(diào)用,在參數(shù)類型數(shù)組中使用了字段名:

         Field getField(String name) -- 獲得命名的公共字段

         Field[] getFields() -- 獲得類的所有公共字段

         Field getDeclaredField(String name) -- 獲得類聲明的命名的字段

         Field[] getDeclaredFields() -- 獲得類聲明的所有字段 

         用于獲得方法信息函數(shù):

         Method getMethod(String name, Class[] params) -- 使用特定的參數(shù)類型,獲得命名的公共方法

         Method[] getMethods() -- 獲得類的所有公共方法

         Method getDeclaredMethod(String name, Class[] params) -- 使用特寫的參數(shù)類型,獲得類聲明的命名的方法

         Method[] getDeclaredMethods() -- 獲得類聲明的所有方法 

    三. Java反射機制應用初探
       
         現(xiàn)在一堆框架搞得人云里霧里的,例如spring等等,大都利用了Java的反射機制,eg. 大名鼎鼎的IOC.昨天晚上閑著沒事的時候,初試了下反射,下面是一個簡單的測試例子:
       

    import java.awt.Button;
    import java.lang.reflect.Method;
    import java.util.Hashtable;

    /**
     * 測試Java的反射機制
     * 
    @author Amigo Xie(xiexingxing1121@126.com)
     * 
    @since 2007/04/20 21:40
     
    */

    public class ReflectionTest {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args) throws Exception {
            ReflectionTest reflection 
    = new ReflectionTest();
            reflection.getNameTest();
            System.out.println(
    "");
            reflection.getMethodTest();
        }

        
        
    /**
         * Class的getName()方法測試
         * 
    @throws Exception
         
    */

        
    public void getNameTest() throws Exception {
            System.out.println(
    "===========begin getNameTest============");
            String name 
    = "amigo";
            Class cls 
    = name.getClass();
            System.out.println(
    "string class name: " + cls.getName());
            
            Button btn 
    = new Button();
            Class btnClass 
    = btn.getClass();
            System.out.println(
    "button class name: " + btnClass.getName());
            Class superBtnClass 
    = btnClass.getSuperclass();
            System.out.println(
    "super button class name: " + superBtnClass.getName());
            
            Class clsTest 
    = Class.forName("java.awt.Button");
            System.out.println(
    "clsTest name: " + clsTest.getName());
            System.out.println(
    "===========end getNameTest============");
        }

        
        
    /**
         * Class的getMethod()方法測試
         * 
    @throws Exception
         
    */

        
    public void getMethodTest() throws Exception {
            System.out.println(
    "===========begin getMethodTest==========");
            Class cls 
    = Class.forName("ReflectionTest");
            Class ptypes[] 
    = new Class[2];
            ptypes[
    0= Class.forName("java.lang.String");
            ptypes[
    1= Class.forName("java.util.Hashtable");
            Method method 
    = cls.getMethod("testMethod", ptypes);
            Object args[] 
    = new Object[2];
            args[
    0= "hello, my dear!";
            
            Hashtable ht 
    = new Hashtable();
            ht.put(
    "name""amigo");
            args[
    1= ht;
            
            String returnStr 
    = (String) method.invoke(new ReflectionTest(), args);
            System.out.println(
    "returnStr= " + returnStr);
            System.out.println(
    "===========end getMethodTest==========");
        }


        
    public String testMethod(String str, Hashtable ht) throws Exception {
            String returnStr 
    = "return str";
            System.out.println(
    "begin testMethod invoked");
            System.out.println(
    "str= " + str);
            System.out.println(
    "name= " + (String) ht.get("name"));
            System.out.println(
    "end testMethod invoked");
            
    return returnStr;
        }

    }


           控制臺輸出如下:
           ===========begin getNameTest============
           string class name: java.lang.String
           button class name: java.awt.Button
           super button class name: java.awt.Component
           clsTest name: java.awt.Button
           ===========end getNameTest============

           ===========begin getMethodTest==========
           begin testMethod invoked......
           str= hello, my dear!
           name= amigo
           end testMethod invoked......
           returnStr= return str
           ===========end getMethodTest==========
    參考文章:
          《侯捷觀點--Java反射機制》
          《java反射機制》  http://hi.baidu.com/javatwt/blog/item/9aeffd13ddfb65025aaf53d4.html
         

    posted on 2007-04-21 11:45 阿蜜果 閱讀(11659) 評論(7)  編輯  收藏 所屬分類: Java


    FeedBack:
    # re: Java反射機制學習筆記(一)[未登錄]
    2007-04-21 15:12 | αβγ
    出差,也不忘寫blog啊  回復  更多評論
      
    # re: Java反射機制學習筆記(一)
    2007-04-25 10:33 | 王凌華
    加油!  回復  更多評論
      
    # re: Java反射機制學習筆記(一)
    2007-07-09 19:54 | lcs
    這個似乎用處不怎么大,寫的不深刻,只是皮毛  回復  更多評論
      
    # re: Java反射機制學習筆記(一)
    2007-08-19 19:26 | tanl
    太膚淺了,就是演示了一下它的方法!  回復  更多評論
      
    # re: Java反射機制學習筆記(一)[未登錄]
    2007-08-19 22:40 | jack
    文章mm自己寫的嗎  回復  更多評論
      
    # re: Java反射機制學習筆記(一)
    2008-09-19 11:35 | x-pei
    恩 這只是些基本的語法!
    沒有什么 ~  回復  更多評論
      
    # re: Java反射機制學習筆記(一)
    2010-01-27 21:52 | IBM-dr.smith
    這樣的代碼一點意義也沒有,看了反而有副作用!  回復  更多評論
      
    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294288
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品久久永久免费| 四虎影视永久在线精品免费| 永久免费av无码入口国语片| 亚洲国产精品日韩| 日韩免费在线中文字幕| 久久久亚洲精品蜜桃臀| 久久精品成人免费观看97| 亚洲色中文字幕无码AV| 国产在线国偷精品免费看| 亚洲精品无码国产| 久久免费的精品国产V∧| 亚洲综合激情另类小说区| 黄色片在线免费观看| 亚洲中文精品久久久久久不卡| 日韩在线免费看网站| 日韩欧美亚洲中文乱码| 亚洲精品97久久中文字幕无码| 男女一进一出抽搐免费视频 | 国内自产拍自a免费毛片| 亚洲乱码日产精品一二三| 国产一级特黄高清免费大片| 一级大黄美女免费播放| 久久香蕉国产线看观看亚洲片| 国产精品免费观看| 美女18一级毛片免费看| 亚洲AV无码码潮喷在线观看 | 免费看国产一级片| 久久国产免费直播| 亚洲一卡二卡三卡| 亚洲成?v人片天堂网无码| 无码日韩精品一区二区免费暖暖| 亚洲伊人久久大香线蕉在观| 日韩激情淫片免费看| a级黄色毛片免费播放视频| 亚洲五月丁香综合视频| 亚洲人成网站色在线入口| 亚洲免费视频网址| 五月天婷婷免费视频| 亚洲最新在线视频| 亚洲精品在线视频| 国产1024精品视频专区免费|