Java基礎之反射

來源:互聯網
上載者:User

標籤:method   class   儲存   變數   通用   參數   lan   bsp   執行個體化   

  反射庫(reflection library)提供了一個非常豐富且精心設計的工具集,以便編寫能夠動態操縱Java代碼的程式。能夠分析類能力的程式成為反射(reflective)。反射機制的功能極其強大,可以用來:在運行中分析類的能力;在運行中查看對象;實現通用的數組作業碼;利用Method對象,這個對象很像C++中的函數指標。

  在程式運行期間,Java運行時系統始終為所有的對象維護一個被稱為運行時的類型標識。這個資訊跟蹤著每個對象所屬的類。虛擬機器利用運行時類型資訊選擇相應的方法執行。然而,可以通過專門的Java類訪問這些資訊。儲存這些資訊的類被稱為Class。Object類中的getClass()方法將會返回一個Class類型的執行個體。

  Class是java.lang包中的類,該類的執行個體可以協助程式建立其他類的執行個體或者取得其他類的對象的內部資訊。

使用Class執行個體化一個對象

  建立對象最常用的方式就是使用new運算子和類的構造方法,實際上也可以使用Class對象得到某個類的執行個體。步驟如下:

  1. 使用Class的類方法得到一個和某類(參數className指定的類)相關的Class對象,public static Class forName(String className) throws ClassNotFoundException。上述方法返回一個和參數className指定的類相關的Class對象。如果類在某個包中,className必須帶有包名,例如,className = “java.util.Data”。
  2. 步驟1中獲得的Class對象調用public Object newInstance() throws InstantiationException, IllegalAccessException方法就可以得到一個className類的對象。

  要特別注意的是:使用Class對象調用newInstance()執行個體化一個className類的對象時,className類必須有無參數的構造方法。

 

擷取類的有關資訊

  當一個類被載入且建立對象時,和該類相關的一個類型為Class的對象就會自動建立,任何對象調用getClass()方法都可以擷取和該對象相關的一個Class對象,這個Class對象調用如下的方法可以擷取對象的有關資訊,比如,建立該對象的類的名字、類中的方法名稱、成員變數的名稱等等。

 1 import java.lang.reflect.*; 2 import java.util.Date; 3  4 public class Example { 5     public static void main(String[] args) { 6         Date date = new Date(); 7         Class cs = date.getClass(); 8         String className = cs.getName(); 9         Constructor[] con = cs.getDeclaredConstructors();10         Field[] field = cs.getDeclaredFields();11         Method[] method = cs.getDeclaredMethods();12 13         System.out.println("className:" + className);14         System.out.println("class constructors:");15         for (Constructor c : con) {16             System.out.println(c.toString());17         }18         System.out.println("class fields:");19         for (Field f : field) {20             System.out.println(f.toString());21         }22         System.out.println("class methods:");23         for (Method m : method) {24             System.out.println(m.toString());25         }26     }27 }

  反射之實現通用的數組作業碼和利用Method暫時沒有用到,暫且不寫……

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.