反射的簡單理解

2021-07-10 13:10:37 字數 2085 閱讀 8976

①載入類[3個方式]

person有2個屬性,name和age,最後會給出person類的資訊

class clazz1 = class.forname("person");
class clazz2 = person.class;
person p = new person();

class clazz3 = p.getclass();

②構造器constructor

constructor c = clazz.getconstructor(null);//獲取的是無參構造

person person1 = (person) c.newinstance(null);

system.out.println(person1.name);

constructor c1 = clazz.getconstructor(string.class);//獲取string引數的構造

person p2 = (person) c1.newinstance("a"); //給引數,例項化

system.out.println(p2.name);

constructor c1 = clazz.getdeclaredconstructor(string.class,int.class);

c1.setaccessible(true); //暴力反射,因為這裡的構造是私有的,不設定會報錯

person p2 = (person) c1.newinstance("a",12);

system.out.println(p2.name);

//person中的私有建構函式

private person(string name,int age)

③方法method

person person = new person(); //這裡給出接下來要執行方法的物件

method m = clazz.getmethod("get", string.class);//get是person類中已經定義的方法名,後面是引數型別

m.invoke(person, "coci");//執行方法

method method = clazz.getmethod("set", string.class,int.class);

object object = method.invoke(person, "csq",21); //後面2個是給出方法執行的引數

system.out.println("返回值 = "+object);

④域field

field field = clazz.getfield("name");//getfield,只能得到公有的域

system.out.println(field.gettype()); //得到域的型別

if(field.gettype().equals(string.class))

field field2 = clazz.getdeclaredfield("age");//getdeclaredfield,這個方法可以得到私有的域&公有的域

field2.setaccessible(true);

system.out.println(field.get(person)+"=="+field2.get(person));

person

class person

public person(string name)

private person(string name,int age)

public void get(string name)

public static void get()

public int set(string name,int age)

}

反射的理解

反射 1 類的物件 依據我們定義的類 new 出來的物件,也成為例項物件 2 類物件 是類載入的產物,包括 包名,類名,屬性,方法,構造方法 獲取類物件 方式 通過反射的技術獲取類物件 會導致類先進行類載入 通過 類的物件 獲取 類物件 student s new student class c s...

反射的理解

class類物件的三種例項化模式 通過物件的確取得了物件的 這就是 反 的本質 在反射的世界裡它再看重的不再是乙個物件,而是物件身後的組成 類 構造 成員.取得class類物件的好處 可以直接通過反射例項化物件 newinstance public static void main string a...

反射 基於反射的簡單工廠

得到type的幾種方法 1.0通過typeof方法得到type type t1 typeof form1 2.0根據物件得到type person p new person type t2 p.gettype 3.0根據程式集得到對應的type assembly ass assembly.load ...