標籤:font class類 edm 構造器 建立 tco 優點 位元組碼 編程
Java反射機制
一、定義
指在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;
對於任意一個對象,都能調用它的任意一個方法;
這種動態擷取資訊以及動態調用對象方法的功能叫Java語言的反射機制。
二、應用
1、產生動態代理;
2、面向切片編程(在調用方法的前後各加棧幀)。
三、優點與缺點
靜態編譯:在編譯時間確定類型,綁定對象,即通過。
動態編譯:運行時確定類型,綁定對象。動態編譯最大限度發揮了java的靈活性,體現了多態的應用,有以降低類之間的藕合性。
反射機制的優點就是可以實現動態建立對象和編譯,體現出很大的靈活性,特別是在J2EE的開發中它的靈活性就表現的十分明顯。
反射機制的缺點是對效能有影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什麼並且它滿足我們的要求。這類操作總是慢於只直接執行相同的操作。
四、常用方法
(1)獲得建構函式的方法
Constructor getConstructor(Class[] params)//根據指定參數獲得public構造器
Constructor[] getConstructors()//獲得public的所有構造器
Constructor getDeclaredConstructor(Class[] params)//根據指定參數獲得public和非public的構造器
Constructor[] getDeclaredConstructors()//獲得public的所有構造器
(2)獲得類方法的方法
Method getMethod(String name, Class[] params),根據方法名,參數類型獲得方法
Method[] getMethods()//獲得所有的public方法
Method getDeclaredMethod(String name, Class[] params)//根據方法名和參數類型,獲得public和非public的方法
Method[] getDeclaredMethods()//獲得所以的public和非public方法
(3)獲得類中屬性的方法
Field getField(String name)//根據變數名得到相應的public變數
Field[] getFields()//獲得類中所以public的方法
Field getDeclaredField(String name)//根據方法名獲得public和非public變數
Field[] getDeclaredFields()//獲得類中所有的public和非public方法
五、擷取Class類
Person p1 = new Person();//下面的這三種方式都可以得到位元組碼CLass c1 = Date.class();p1.getClass(); //若存在則載入,否則建立,往往使用第三種,類的名字在寫來源程式時不需要知道,到運行時再傳遞過來
Class.forName("java.lang.String");
Java反射機制