<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极品无码专区亚洲| 2022国内精品免费福利视频 | 国产偷国产偷亚洲清高APP| 18级成人毛片免费观看| 久久久无码精品亚洲日韩按摩| 免费人成黄页在线观看日本| 亚洲AV无码第一区二区三区| 国产精品视频白浆免费视频| 亚洲欧洲日韩不卡| 国产在线观看片a免费观看| 亚洲人妖女同在线播放| 国产成人免费爽爽爽视频| 亚洲日韩亚洲另类激情文学| 国产91久久久久久久免费| 精品免费久久久久国产一区| 国产亚洲精品影视在线产品 | 一级毛片一级毛片免费毛片| 亚洲婷婷国产精品电影人久久| 一级有奶水毛片免费看| 久久亚洲精品成人综合| 免费在线观看h片| 亚洲精品自偷自拍无码| 亚洲精品国产va在线观看蜜芽| 中文字幕无码免费久久| 亚洲午夜在线一区| 免费在线黄色网址| 免费黄色电影在线观看| 亚洲乱亚洲乱妇24p| 一本色道久久综合亚洲精品| 最近免费中文字幕大全高清大全1| 亚洲 日韩经典 中文字幕 | 免费成人在线观看| 久久er国产精品免费观看2| 亚洲另类小说图片| 亚洲国产天堂久久综合| 亚洲精品视频免费看| 色多多A级毛片免费看| 久久精品国产亚洲AV无码麻豆| 成年美女黄网站18禁免费 | 久久久受www免费人成|