java之反射

來源:互聯網
上載者:User

標籤:java之反射

一、類的載入

  當程式要使用某個類時,如果該類還沒有被載入到記憶體中,則系統會通過載入、串連、初始化三步來實現對這個類進行初始化。

  載入:就是指將class檔案讀入到記憶體中,並為之建立一個Class對象。任何類被使用的時候,系統都會建立一個Class對象。

  串連:1)驗證 是否有正確的內部結構,並和其他類協調一致 2)準備 負責為類的靜態成員分配記憶體,並設定預設初始化值 3)解析 將類的位元據中的符號引用替換為直接引用。

  初始化:就是進行屬性初始化、構造初始化等等。


二、類的初始化時機

  1.建立類的執行個體

  2.訪問類的靜態變數,或者為靜態變數賦值

  3.訪問類的靜態方法

  4.使用反射方式來強化自建立某個類或者介面對應的Class對象

  5.初始化某個類的子類

  6.直接使用java.exe命令來運行某個朱磊


三、類載入器

  負責將.class檔案載入到記憶體中,並為之產生對應的Class對象。

  雖然我們不需要關係類的載入機制,但是瞭解這個機制,我們就能更好的理解程式的運行。


類載入器的組成:

  根類載入器:BootStrap ClassLoader,也稱為引導類載入器,負責java核心類的載入,比如System、String等。在JDK中JRE的lib目錄下rt.jar檔案中。

  擴充類載入器:Extension ClassLoader,負責JRE的擴充目錄中jar包的載入。在JDK中JRE的lib目錄中的ext目錄。

  系統類別載入器:System ClassLoader,負責在JVM啟動時載入來自java命令的class檔案,以及classpath環境變數所指定的jar包和路徑。


  通過上面的描述,我們知道我們常用的東西的載入都是由誰來完成的,到目前為止,我們已經知道把class檔案載入到記憶體了,那麼,如果我們僅僅站在這些class檔案的角度,我們如果來使用這些class檔案的內容呢?這就是反射


四、反射

  java反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能被稱為java語言的反射機制。

  要想解剖一個類,必須先擷取到該類的位元組碼檔案對象。而解剖使用的就是Class類中的方法,所以先要擷取到每一個位元組碼檔案對應的Class類型的對象。


反射擷取class檔案對象的三種方式

package cn7;/** * 反射:就是通過class檔案對象,去使用該檔案中的成員變數,構造方法,成員方法。 *  * 要想這樣使用,首先你必須得到class檔案鍍錫,其實也就是得到Class類的對象。 * Class類: *      成員變數 Field *      構造方法 Constructor *      成員方法 Method * 擷取class檔案對象的方式: * 1.Object類的getClass()方法 * 2.資料類型的靜態屬性class * 3.Class類中的靜態方法forName(String className) *  * 一般我們在開發中使用的是第三種,因為它傳入的是一個字串,而不是一個具體的類名,這樣我們就可以把這樣的字串配置到設定檔中。 */publicclass ReflectDemo {    publicstaticvoid main(String[] args) throws Exception {        //方式1        Person p = new Person();        Class<? extends Person> c = p.getClass();        Person p2 = new Person();        Class<? extends Person> c2 = p2.getClass();                System.out.println(p == p2);//false        System.out.println(c==c2);//true                //方式2        Class<? extends Person> c3 = Person.class;        System.out.println(c2==c3);//true                //方式3        Class<?> c4 = Class.forName("cn7.Person");        System.out.println(c == c4);//true    }}


  


本文出自 “11831428” 部落格,請務必保留此出處http://11841428.blog.51cto.com/11831428/1877463

java之反射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.