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

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

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

    隨筆-31  評(píng)論-257  文章-0  trackbacks-0
          在Java運(yùn)行時(shí)環(huán)境中,對(duì)于任意一個(gè)類(lèi),能否知道這個(gè)類(lèi)有哪些屬性和方法?對(duì)于任意一個(gè)對(duì)象,能否調(diào)用它的任意一個(gè)方法?答案是肯定的。這種動(dòng)態(tài)獲取類(lèi)的信息,以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能來(lái)自于Java語(yǔ)言的反射(Reflection)機(jī)制。Java反射機(jī)制主要提供以下功能:

    [*]在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類(lèi);
    [*]在運(yùn)行時(shí)構(gòu)造任意一個(gè)類(lèi)的對(duì)象;
    [*]在運(yùn)行時(shí)判斷任意一個(gè)類(lèi)所具有的成員變量和方法;
    [*]在運(yùn)行時(shí)調(diào)用任意一個(gè)類(lèi)的方法;
    [*]生成動(dòng)態(tài)代理;


          在JDK中,主要由以下類(lèi)來(lái)實(shí)現(xiàn)Java反射機(jī)制,這些類(lèi)都位于 java.lang.reflect 包中。

          [*] Class 類(lèi):代表一個(gè)類(lèi)。
          [*] Field 類(lèi):代表類(lèi)的成員變量
          [*] Method 類(lèi):代表類(lèi)的方法
          [*] Constructor 類(lèi):代表類(lèi)的構(gòu)造方法
          [*] Array 類(lèi):提供了動(dòng)態(tài)創(chuàng)建數(shù)組,以及訪問(wèn)數(shù)組元素的靜態(tài)方法


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


    運(yùn)行命令 “java DumpMethods java.util.Stack”,就會(huì)顯示java.util.Stack 類(lèi)所具有的方法。

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

    評(píng)論:
    # re: Java反射機(jī)制 2009-04-07 16:17 | guooo
    寫(xiě)的不錯(cuò)  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 浮力影院第一页小视频国产在线观看免费| 亚洲免费网站在线观看| 成年女人免费碰碰视频| 成在人线av无码免费高潮喷水| 久久亚洲精品11p| 亚洲人成网站18禁止久久影院 | 亚洲日韩乱码久久久久久| 免费少妇a级毛片| 国产精品免费观看久久| 无码国产精品一区二区免费式芒果 | 亚洲国产日韩在线| 久久精品国产亚洲av麻| 久久亚洲高清综合| 亚洲国产一区视频| 免费a级黄色毛片| 午夜老司机免费视频| 国产人成免费视频网站| 久久久免费的精品| 免费网站看av片| 成人免费av一区二区三区| 免费国产高清毛不卡片基地| 亚洲av中文无码乱人伦在线观看 | 97精品免费视频| 亚洲国产精品免费视频| 久久免费精品视频| 国产在线精品免费aaa片| 最新亚洲成av人免费看| 国产免费A∨在线播放| 污污污视频在线免费观看| 美女视频黄.免费网址| 美女羞羞免费视频网站| 男女超爽视频免费播放| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲精品无码mⅴ在线观看| 亚洲视频无码高清在线| 亚洲无人区码一二三码区别图片 | 2021国产精品成人免费视频| 57PAO成人国产永久免费视频| 免费在线看v网址| 欧洲精品成人免费视频在线观看| 成年丰满熟妇午夜免费视频|