概念:是被視為動态語言的關鍵,反射機制允許程式在執行期借助于Reflection API取得任何類的内部資訊,并能直接操作任意對象的内部屬性和方法
加載完類之後,在堆記憶體的方法區中就産生了一個Class類型的對象(一個類隻能有一個Class對象),這個對象就包含了完整的類的結構資訊。我們可以通過這個對象看到類的結構。
這個對象就像一面鏡子,透過這個鏡子看到類的結構,是以,我們形象的稱之為反射
動态語言和靜态語言:
動态語言:是一類在運作時可以改變其結構的語言:例如新的函數,對象,甚至代碼可以被引進,已有的函數可以被删除或是其他結構上的變化。通俗點說就是==在運作時代碼可以根據某些條件改變自身結構==
主要的動态語言:Object-C、C#、JavaScript、PHP、Python、Erlang
靜态語言:與動态語言相對應,==運作時結構不可變的語言(Java、C、C++)
注意:Java不是動态語言,但是可以稱之為“準動态語言”,即Java有一定的動态性,我們可以利用反射機制,位元組碼操作獲得類似動态語言的特性。java的動态性讓程式設計的時候更加靈活
java反射機制提供的功能:
- 在運作時判斷任意一個對象所屬的類
- 在運作時構造任意一個類的對象
- 在運作時判斷任意一個類所具有的成員變量和方法
- 在運作時擷取泛型資訊
- 在運作時調用任意一個對象的成員變量和方法
- 在運作時處理注解
- 生成動态代理
反射相關的主要API:
- java.lang.Class:代表一個類
- java.lang.reflect.Method:代表類的方法
- java.lang.reflect.Field:代表類的成員變量
- java.lang.reflect.Constructor:代表類的構造器