天天看點

反射

概念:是被視為動态語言的關鍵,反射機制允許程式在執行期借助于Reflection API取得任何類的内部資訊,并能直接操作任意對象的内部屬性和方法

加載完類之後,在堆記憶體的方法區中就産生了一個Class類型的對象(一個類隻能有一個Class對象),這個對象就包含了完整的類的結構資訊。我們可以通過這個對象看到類的結構。

這個對象就像一面鏡子,透過這個鏡子看到類的結構,是以,我們形象的稱之為反射

動态語言和靜态語言:

動态語言:是一類在運作時可以改變其結構的語言:例如新的函數,對象,甚至代碼可以被引進,已有的函數可以被删除或是其他結構上的變化。通俗點說就是==在運作時代碼可以根據某些條件改變自身結構==

主要的動态語言:Object-C、C#、JavaScript、PHP、Python、Erlang

靜态語言:與動态語言相對應,==運作時結構不可變的語言(Java、C、C++)

注意:Java不是動态語言,但是可以稱之為“準動态語言”,即Java有一定的動态性,我們可以利用反射機制,位元組碼操作獲得類似動态語言的特性。java的動态性讓程式設計的時候更加靈活

java反射機制提供的功能:

  1. 在運作時判斷任意一個對象所屬的類
  2. 在運作時構造任意一個類的對象
  3. 在運作時判斷任意一個類所具有的成員變量和方法
  4. 在運作時擷取泛型資訊
  5. 在運作時調用任意一個對象的成員變量和方法
  6. 在運作時處理注解
  7. 生成動态代理

反射相關的主要API:

  1. java.lang.Class:代表一個類
  2. java.lang.reflect.Method:代表類的方法
  3. java.lang.reflect.Field:代表類的成員變量
  4. java.lang.reflect.Constructor:代表類的構造器