反射 ---基礎

反射是在只知道類的名字和路徑的情況下,通過反射獲取類中的屬性,構造器,方法,並創建該類的對象,使用其中的方法。
反射可以分爲 步:創建字符串(內容爲類的路徑)———- String s=”com.reflection.Test”
使用Class.forName得到該類的類——— Class c =Class.forName(s);
然後同過Class.get來取得屬性,構造器,方法的數組——– Filed / Constructor /Method [] f =c.getFiled(); / c.getConstructor(); / c.getMethod();
通過數組來調用屬性,構造器,方法————-
其中屬性爲:f[X].set();
構造器:f[X].newInstance();
方法爲:f[x].invoke();

    String s ="reflection.Test";
     Class c =Class.forName(s);
     Method m[]=c.getDeclaredMethods();
     Constructor [] cons =c.getDeclaredConstructors();
     Filed [] fil =c.getDeclaredFields();
     for(Constructor con:cons){
         System.out.println(con);
     }
     for(Method  ma:m){
         System.out.println(ma);
     }
     for(Filed fi:fil){
         System.out.println(fi);
     }
    Test te =(Test) cons [0].newInstance();    //構造對象時需要強轉
     m[4].invoke(te,20);         //調用第五個方法,對象爲te,參數爲20
      fil[0].set(te,"lllll");     //給第一個屬性賦值
    } 

結果輸出爲:

屬性列表
private java.lang.String 反射.Test.name
private int 反射.Test.age
構造器列表
public 反射.Test()
方法列表
public void 反射.Test.add(int)
public java.lang.String 反射.Test.getName()
public void 反射.Test.setName(java.lang.String)
public void 反射.Test.setAge(int)
public int 反射.Test.getAge()

特別要注意,靜態的方法和屬性可以直接調用,當沒有參數列表或對象時用null表示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章