反射--我快要遺忘的重要知識點整理

eBusinessMan發表於2015-03-16

Class初識:

Java中萬物萬事皆物件,同樣,任何一個類也是物件,是Class類的物件。

假設有一個類Apple

1.       Class c1 =  Apple.class;表明每一個類都有一個靜態成員變數

2.       Class c2 =  new Apple().getClass();

3.       Class c3 =  Class.forName(“com.test.Apple”);

由於一個類只可能是Class類的一個例項物件,所以c1 == c2 && c2==c3 àtrue;

動態載入類:

編譯時刻載入類:就是 靜態載入類,new建立物件就是靜態載入類。

執行時刻載入類:就是 動態載入類。

靜態載入類的缺點是:因為在編譯時刻就要求所有的可能用到的類都要載入進來,所以如果程式中缺少了某一個類的話,就會導致整個程式跑不起來。

但是如果我們想要用哪個類時才載入哪個,不用時就不載入的話(即需要時才載入進來),這個就實現不了了。

例如軟體升級,一些功能性的類一般採用動態載入。

基本的資料型別:

1.       Class c1 = int.class;

2.       Class c2 = double.class;

3.       Class c3 = Double.class;

4.       Class c4 = void.class;

(1)    獲取類的方法資訊:

//根據方法名和入參的類型別陣列,獲取包括從父類繼承而來的所有public方法

Method amethod = c1.getMethod(“方法名”,Class[] 入參的類型別陣列);

//獲取包括從父類繼承而來的所有public方法

Method[] methods = c1.getMethods();

 

//根據方法名和入參的類型別陣列,獲取此類自己宣告的方法,public,protected ,private;

Method[] methods = c1.getDefaultMethod(String name,Class[]入參的類型別陣列);

//獲取此類自己宣告的方法,public , protected , private;

Method[] methods = c1.getDefaultMethods();

 

//獲取某個成員方法的傳人的引數的類型別:按照方法中引數的排列順序

Method m = Methods[1];Class[] paramTypes = m.getParameterTypes();

//獲取某個成員方法的返回值型別

Method m = Methods[1];Class[] paramTypes = m.getReturnType();

 

(2)獲取類的成員變數的資訊

//成員變數也是物件

Field[] fields = c1.getFields();//獲取包括從父類繼承來的public的變數

Field[] fields = c1.getDefaultFields();//獲取自己宣告的所有變數

//獲取Field物件的類型別

Field field = fields[1]; Class cField = field.getType();//例如返回int.class

(3)獲取類的構造方法的資訊

/**

返回一個包含某些 Constructor 物件的陣列,這些物件反映此 Class 物件所表示的類的所有public構造方法。如果該類沒有公共構造方法,或者該類是一個陣列類,或者該類反映一個基本型別或 void,則返回一個長度為 0 的陣列。

*/

ConStructor[] constructors = c1.getConstructors();

Constructor con =  constructor[1];

Class[] paramTypes = con.getParameterTypes();

反射使用專題
(1)曾經的我們是這樣來呼叫方法的:

              Apple a = new Apple();

              String returnvlaue = a.getName(1);//物件呼叫方法

但是如今,反過來:方法本身通過物件呼叫自己

              Method m = a.getClass().getMethod(“getName”,int.class);

String returnvlaue = (String)m.invoke(a,new Object[]{1});

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1461584/,如需轉載,請註明出處,否則將追究法律責任。

相關文章