Java基礎之—反射(非常重要)__Java

來源:互聯網
上載者:User

                                                                              Java基礎之—反射(非常重要)

**原博主**: http://blog.csdn.net/sinat_38259539/article/details/71799078 反射是架構設計的靈魂 (使用的前提條件:必須先得到代表的位元組碼的Class,Class類用於表示.class檔案(位元組碼))
一、反射的概述 JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。
要想解剖一個類,必須先要擷取到該類的位元組碼檔案對象。而解剖使用的就是Class類中的方法.所以先要擷取到每一個位元組碼檔案對應的Class類型的對象.


以上的總結就是什麼是反射 反射就是把java類中的各種成分映射成一個個的Java對象 例如:一個類有:成員變數、方法、構造方法、包等等資訊,利用反射技術可以對一個類進行解剖,把個個組成部分映射成一個個對象。      (其實:一個類中這些成員方法、構造方法、在加入類中都有一個類來描述) 如圖是類的正常載入過程:反射的原理在與class對象。 熟悉一下載入的時候:Class對象的由來是將class檔案讀入記憶體,並為之建立一個Class對象。


其中這個Class對象很特殊。我們先瞭解一下這個C lass類
二、查看Class類在java中的api詳解(1.7的API) 如何閱讀java中的api詳見java基礎之——String字串處理


Class 類的執行個體表示正在啟動並執行 Java 應用程式中的類和介面。也就是jvm中有N多的執行個體每個類都有該Class對象。(包括基礎資料型別 (Elementary Data Type)) Class 沒有公用構造方法。Class 對象是在載入類時由 JAVA 虛擬機器以及通過調用類載入器中的defineClass 方法自動構造的。也就是這不需要我們自己去處理建立,JVM已經幫我們建立好了。

沒有公用的構造方法,方法共有64個太多了。下面用到哪個就詳解哪個吧


三、反射的使用(這裡使用Student類做示範) 先寫一個Student類。
1、擷取Class對象的三種方式 1.1 Object ——> getClass();
1.2 任何資料類型(包括基礎資料型別 (Elementary Data Type))都有一個“靜態”的class屬性
1.3 通過Class類的靜態方法:forName(String  className)(常用)

其中1.1是因為Object類中的getClass方法、因為所有類都繼承Object類。從而調用Object類來擷取

[java]  view plain  copy <span style=“font-size:18px;”>package fanshe;   /**   * 擷取Class對象的三種方式   * 1 Object ——> getClass();   * 2 任何資料類型(包括基礎資料型別 (Elementary Data Type))都有一個“靜態”的class屬性   * 3 通過Class類的靜態方法:forName(String  className)(常用)   *   */   public class Fanshe {       public static void main(String[] args) {           //第一種方式擷取Class對象             Student stu1 = new Student();//這一new 產生一個Student對象,一個Class對象。           Class stuClass = stu1.getClass();//擷取Class對象           System.out.println(stuClass.getName());                      //第二種方式擷取Class對象           Class stuClass2 = Student.class;           System.out.println(stuClass == stuClass2);//判斷第一種方式擷取的Class對象和第二種方式擷取的是否是同一個                      //第三種方式擷取Class對象           try {               Class stuClass3 = Class.forName(”fanshe.Student”);//注意此字串必須是真實路徑,就是帶包名的類路徑,包名.類名               System.out.println(stuClass3 == stuClass2);//判斷三種方式是否擷取的是同一個Class對象           } catch (ClassNotFoundException e) {               e.printStackTrace();           }                  }   }</span>   [java]  view plain  copy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.