反射的概述
- JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調用對象的方法的功能稱為java語言的反射機制。
- 要想解剖一個類,必須先要獲取到該類的字節(jié)碼文件對象。而解剖使用的就是Class類中的方法.所以先要獲取到每一個字節(jié)碼文件對應的Class類型的對象.
反射就是把java類中的各種成分映射成一個個的Java對象
- 例如:一個類有:成員變量、方法、構造方法、包等等信息,利用反射技術可以對一個類進行解剖,把個個組成部分映射成一個個對象。
(其實:一個類中這些成員方法、構造方法、在加入類中都有一個類來描述)
*如圖是類的正常加載過程:反射的原理在與class對象。
熟悉一下加載的時候:Class對象的由來是將class文件讀入內存,并為之創(chuàng)建一個Class對象。

image
- Class 類的實例表示正在運行的 Java 應用程序中的類和接口。也就是jvm中有N多的實例每個類都有該Class對象。(包括基本數(shù)據(jù)類型)
Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的defineClass 方法自動構造的。也就是這不需要我們自己去處理創(chuàng)建,JVM已經(jīng)幫我們創(chuàng)建好了。
Java反射框架提供以下功能:
- 在運行時判斷任意一個對象所屬的類
- 在運行時構造任意一個類的對象
- 在運行時判斷任意一個類所具有的成員變量和方法(通過反射設置可以調用 private)
- 在運行時調用人一個對象的方法
、
反射的主要用途
- 反射最重要的用途就是開發(fā)各種通用框架。
- 很多框架(比如 Spring)都是配置化的(比如通過 XML文件配置 JavaBean,Action之類的),為了保證框架的通用性,他們可能根據(jù)配置文件加載不同的對象或類,調用不同的方法,這個時候就必須用到反射——運行時動態(tài)加載需要加載的對象。