国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

查看Java Reflection類內部情況

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

本文關鍵詞: Java

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

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

實例

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

newTestClass().setName("TestName");

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

基本技巧

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

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

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

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

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

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

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

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

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

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

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

更多閱讀參考

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
學習Java的30個基本概念2222,Java基礎,編程開發(fā),Java,好視點技術文檔
歡迎光臨 - 琳婕小筑-老貓的理想 - Java新手入門的30個基本概念 -
Java新手入門的30個基本概念
Java反射之Field用法
11提出了java語言的11個關鍵特性
C#學習筆記
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服