小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 linjisong 2007-09-30

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

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

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

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

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

實(shí)例

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

newTestClass().setName("TestName");

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

基本技巧

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

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

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

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

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

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

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

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

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

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

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

更多閱讀參考

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多