首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射機制:執行期型別資訊與元件化程式設計基礎

     編輯:Java 相關知識

RTTI 可查詢未知物件型別,但限制:型別必須編譯期已知。編譯器必須明確知道 RTTI 要處理的所有類別。

若取得不在程式空間內的物件參考怎麼辦?物件類別甚至編譯期不可用。例:從磁碟/網路取得位元組序列,被告知代表某類別。編譯器不知該類別,如何使用?

驅動力一:元件化程式設計 (RAD)

  • 視覺化建構:拖曳元件圖示至表單,設定屬性值配置
  • 設計期配置要求元件可「例示」(自由取得實例)
  • 元件需揭露部分內容供讀寫屬性值
  • 事件處理元件需揭露方法資訊,讓 RAD 環境協助覆寫事件驅動方法
  • 反射提供偵測可用方法並產生方法名的機制
  • Java Beans (第 13 章) 為此提供基礎設施

驅動力二:遠端方法調用 (RMI)

  • 跨機器建立與執行遠端物件
  • 分散式計算:計算密集型工作分割至閒置機器
  • 業務規則集中管理於特定機器,易修改部署
  • 發揮專用硬體優勢(如矩陣運算)

Java 1.1 反射 API

Class 類別擴展支援反射。新增庫 java.lang.reflect 含 Field、Method、Constructor(皆實作 Member 介面)。這些物件由 JVM 執行期建立,代表未知類別對應成員。可:

  • 用建構子建立新物件
  • get()/set() 讀寫 Field 關聯欄位
  • invoke() 呼叫 Method 關聯方法
  • getFields()/getMethods()/getConstructors() 取得陣列

匿名物件類別資訊可在執行期完整揭露,編譯期無需知悉任何資訊。

反射無魔法

JVM 只是檢查物件、查詢所屬類別(同 RTTI)。之後 Class 物件必須載入(.class 檔在本機或網路可取得)。RTTI 與反射唯一差別:RTTI 編譯期開啟檢查 .class;反射由執行期環境開啟檢查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved