乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      查看Java Reflection類內(nèi)部情況 - Builder開發(fā)者在線

       linjisong 2007-09-30

      查看Java Reflection類內(nèi)部情況

      開發(fā)者在線 Builder.com.cn 更新時(shí)間:2006-12-10作者:Builder.com.cn 來源:

      本文關(guān)鍵詞: Java

      Java Reflection(反射)是一種在運(yùn)行期間查看Java對(duì)象內(nèi)部情況的技術(shù),包括Java對(duì)象的變量、支持的方法、實(shí)現(xiàn)的接口、擴(kuò)展的類——基本上在編譯時(shí)你能想知道的關(guān)于對(duì)象的任何東西。

      Reflection API位于java.lang.reflect包中,在所有J2SE安裝程序中都有。它主要是為一些通用程序設(shè)計(jì)的,如數(shù)據(jù)庫瀏覽器或可視代碼編輯器,但是它可以被運(yùn)用在其他任何應(yīng)用軟件中。Reflection用于處理之前你所知甚少的類文件。反射需要很高的間接制造費(fèi)用,所以在使用之前,你應(yīng)該確定自己不能僅憑一個(gè)簡單的接口——Class.forName(),而要用一個(gè)委托對(duì)象。

      實(shí)例

      列表 A含有一個(gè)使用Reflection代碼的例子。列表A中的代碼與下列代碼等同:

      newTestClass().setName("TestName");

      第一個(gè)例子中的代碼用反射動(dòng)態(tài)地調(diào)用新建對(duì)象的方法。這使用起來相當(dāng)方便,但相對(duì)較慢。

      基本技巧

      Reflection中包含了兩種基本的技術(shù):探索和按名稱使用。以下是對(duì)兩種方法的描述:

      • 探索指采用一個(gè)對(duì)象或類,并發(fā)現(xiàn)其成員、超類、實(shí)現(xiàn)的接口,然后盡可能地使用被發(fā)現(xiàn)的元素。
      • 按名字使用指以一個(gè)元素的符號(hào)名開始,并使用已命名的元素。

      通常,探索方法以一個(gè)對(duì)象開始,并通過調(diào)用Object.getClass()方法獲得對(duì)象的類。類對(duì)象有很多方法發(fā)現(xiàn)類的內(nèi)容。以下是部分方法:

      • getMethods():返回一組表示類或接口的所有公共方法的方法對(duì)象數(shù)組。
      • getConstructors():返回一組表示類的所有公共構(gòu)造器的構(gòu)造器對(duì)象數(shù)組。
      • getFields():返回一組表示類或接口所有公共字段的字段對(duì)象數(shù)組。
      • getClasses():返回一組表示所有屬于類或接口的公共類和接口(例如,內(nèi)部類)的類對(duì)象數(shù)組。
      • getSuperclass():返回表示類或接口的超類的類對(duì)象(接口返回為空值)。
      • getInterfaces():返回一組表示類或接口執(zhí)行的所有接口的類對(duì)象數(shù)組。

      你可以通過探索,即應(yīng)用類字面(如MyClass.class)或使用類名(如Class.forName("mypackage.MyClass"))獲得類對(duì)象。有了類對(duì)象,成員對(duì)象方法、構(gòu)造器或字段可以通過使用成員的符號(hào)名獲得。以下是最重要的一些技術(shù):

      • getMethod("methodName", Class...):返回表示接受類參數(shù)指定參數(shù)的類或接口中名為“methodName”的公共方法的方法對(duì)象。
      • getConstructor(Class...):返回表示接受類參數(shù)指定參數(shù)的類公共構(gòu)造器的構(gòu)造器對(duì)象。
      • getField("fieldName"):返回表示類或接口中名為“fieldname”的公共字段的字段對(duì)象。

      你可以使用Method、Constructor和Field(字段)對(duì)象動(dòng)態(tài)地訪問類表示成員。例如:

      • Field.get(Object):返回一個(gè)包含輸入get()對(duì)象實(shí)例的字段值對(duì)象。(如果字段對(duì)象表示靜態(tài)字段,那么對(duì)象參數(shù)便被忽略,也可能為空。)
      • Method.invoke(Object, Object...):返回一個(gè)包含為輸入invoke()的第一個(gè)對(duì)象參數(shù)實(shí)例調(diào)用方法的結(jié)果的對(duì)象。其余對(duì)象參數(shù)被傳遞給輸入方法。(如果方法對(duì)象表示一個(gè)靜態(tài)方法,那么第一個(gè)對(duì)象參數(shù)便被忽略,也可能為空。)
      • Constructor.newInstance(Object...):返回調(diào)用構(gòu)造器的新對(duì)象實(shí)例。對(duì)象參數(shù)輸入構(gòu)造器。(注意類的無參數(shù)構(gòu)造器也可以通過newInstance()被調(diào)用。)

      創(chuàng)建數(shù)組和代理類

      java.lang.reflect包提供一個(gè)數(shù)組,其中包含了可創(chuàng)建和操控?cái)?shù)組對(duì)象的靜態(tài)方法。從J2SE 1.3開始,java.lang.reflect包還提供了一個(gè)代理類,它支持動(dòng)態(tài)創(chuàng)建用來實(shí)現(xiàn)指定接口的代理類。

      代理類的執(zhí)行由執(zhí)行InvocationHandler接口的一個(gè)補(bǔ)充對(duì)象完成。代理對(duì)象的每個(gè)調(diào)用方法調(diào)用InvocationHandler的方法調(diào)用(對(duì)象、方法、對(duì)象[])——第一參數(shù)是代理對(duì)象,第二參數(shù)是表示代理所執(zhí)行接口的方法的方法對(duì)象,而第三參數(shù)是輸入接口方法的參數(shù)數(shù)組。invoke()方法返回一個(gè)對(duì)象結(jié)果,其中包含返回調(diào)用代理接口方法的代碼的結(jié)果。

      更多閱讀參考

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多