隨筆-31  評論-257  文章-0  trackbacks-0
                在Java運行時環境中,對于任意一個類,能否知道這個類有哪些屬性和方法?對于任意一個對象,能否調用它的任意一個方法?答案是肯定的。這種動態獲取類的信息,以及動態調用對象的方法的功能來自于Java語言的反射(Reflection)機制。Java反射機制主要提供以下功能:

          [*]在運行時判斷任意一個對象所屬的類;
          [*]在運行時構造任意一個類的對象;
          [*]在運行時判斷任意一個類所具有的成員變量和方法;
          [*]在運行時調用任意一個類的方法;
          [*]生成動態代理;


                在JDK中,主要由以下類來實現Java反射機制,這些類都位于 java.lang.reflect 包中。

                [*] Class 類:代表一個類。
                [*] Field 類:代表類的成員變量
                [*] Method 類:代表類的方法
                [*] Constructor 類:代表類的構造方法
                [*] Array 類:提供了動態創建數組,以及訪問數組元素的靜態方法


          看看下面例子:它讀取命令行參數指定的類名,然后打印這個類的所具有的方法信息:
           1 import java.lang.reflect.*;
           2 public class DumpMethods{
           3     public static void main(String[] args)thorws Exception{
           4         //加載并初始化命令行參數指定的類
           5      Class classType = Class.forName(args[0]);
           6         //獲得類的所有方法
           7      Method[] methods = classType.getDeclaredMethods();
           8         for(int i=0;i<methods.length;i++){
           9             System.out.println(methods[i].toString());
          10         }
          11     }
          12 }


          運行命令 “java DumpMethods java.util.Stack”,就會顯示java.util.Stack 類所具有的方法。

          這個只是十分之基本,很簡單的示例,Java的反射還可以做很多東西,可以跟據用戶的輸入就可以得知哪些類,需要做什么操作,就是說動態跟據需要來調用相應的類與相應的方法,我之前也做過,用Struts結合Java反射來實現一些功能,有些時候,別人的接口代碼里只返回一個Object給你,而你就要用反射來得知該Object是屬于哪一個類型,之后根據設置做相應的操作,不知道大家有用過Hibernate沒有,這個框架就是大量用到了Java反射,用戶只需配置一下XML文件,Hibernate運行時,就會讀取解析XML配置文件,之后動態找相應的類,實例化相應的POJO等等,這些都是全動態化的,也就是說,我請求這個表的數據時,就自動實例化該表的POJO實例,這些都是在XML配置文件里定義好映射關系。ORM框架就如此,很多中間件也是大量使用反射,將反射靈活的運用起來,將會得到意想不到的效果,這也是Java的半動態語言吧。使編程工作變得十分靈活。
          posted on 2008-07-29 13:00 姜大叔 閱讀(289) 評論(1)  編輯  收藏 所屬分類: Java

          評論:
          # re: Java反射機制 2009-04-07 16:17 | guooo
          寫的不錯  回復  更多評論
            
          主站蜘蛛池模板: 兴和县| 潮州市| 阿巴嘎旗| 綦江县| 宜城市| 河南省| 海兴县| 永清县| 泸西县| 年辖:市辖区| 喀喇沁旗| 邹平县| 铜陵市| 读书| 紫金县| 马鞍山市| 武平县| 达拉特旗| 华坪县| 阜新市| 临湘市| 白玉县| 台东县| 荥经县| 九龙城区| 密山市| 日照市| 连州市| 元谋县| 贡山| 房山区| 芜湖市| 湖南省| 宜章县| 那曲县| 邛崃市| 永善县| 中江县| 分宜县| 铁岭市| 东城区|