黑馬程式設計師——Java高新技術---反射

qq_14926317發表於2015-12-07

——— android培訓java培訓、期待與您交流! ———

理解反射

所謂反射,就是把一個類裡面所有的變數和方法以及構造器的資訊都複製出來,可以檢視,還可以使用。所以反射的出現讓我們可以動態的實用類和物件,

反射的操作:得到類的Class物件,抽取Class物件中的屬性資訊,得到這個類的變數、方法和建構函式。
實踐在java中即是:通過Class類獲取原類的所有資訊,通過Property類將資訊儲存到Field或Method、Constructor類中。

反射操作

程式碼:

Class c                 //得到某個類的Class物件
PropertyDescriptor pd   //得到這個類的某個屬性
Method method           //得到這個屬性的操作方法(getset)
                                // get -> getReadMethod()
                                // set -> getWriteMethod()
method.invoke(obj)  //對這個物件操作這個方法

  例:
    Class c = obj.getClass();
    PropertyDescriptor pd = new 
                      PropertyDescriptor(field,c);
    Method method = pd.getReadMethod();
    return method.invoke(obj);

Class類

Class類存放原類的所有資訊,是反射的基礎。

有三種方法得到類的Class物件:

  • 類名.class
  • 變數名.getClass()
  • Class.forName(“類名”)

    還有一種比較特殊的:數值型別.Type

程式碼:

Person person = new Person();

Class class1 = Person.class;
Class class2 = person.getClass();
Class class3 = Class.forName("Person");

將類的資訊儲存進Method物件中後,通過invoke()方法使用類中的方法。


Constructor

存放類的建構函式

程式碼:

Class c = Person.class;
//args...處是引數列表
Constructor constructor = c.getDeclaredConstructor(args...);

//獲得所有建構函式
Constructor[] declaredConstructor = c.getDeclaredConstructors()

相關文章