反射的理解

2022-09-06 15:30:18 字數 2092 閱讀 8318

/** class類物件的三種例項化模式

* 通過物件的確取得了物件的**,這就是「反」的本質

* 在反射的世界裡它再看重的不再是乙個物件,而是物件身後的組成(類、構造、成員...)

** 取得class類物件的好處:可以直接通過反射例項化物件:newinstance() */

public

static

void main(string args) throws

classnotfoundexception

/*

通過反射獲取普通方法,

通過反射例項化物件呼叫普通方法

*/package

com.reflect;

import

j**a.lang.reflect.method;

/**

* 獲取方法(j**a.lang.class)

* getmethod(...)

* getmethods()

* 呼叫方法:

* 方法物件.invoke(...) */

class

student

public

string getname()}/*

* 需要class類物件獲取普通方法

* method setmethod=clazz.getmethod("set"+initcap(attribute), string.class);

* 需要class類物件建立乙個例項化物件來執行普通方法

* setmethod.invoke(stu, value);//相當於 stu.setname(value);此方法無返回值 */

public

class

reflect_method

public

static

string initcap(string s)

}

/*

反射操作字段

*/package

com.reflect;

import

j**a.lang.reflect.accessibleobject;

import

j**a.lang.reflect.field;

/** 反射呼叫成員(字段/屬性)

* getfileds():獲取父類的所有成員

* getdeclaredfields():獲取本類的所有成員

* * 設定成員值

* 成員物件.set(obj,value)

* 獲取成員值

* 成員物件.get(obj)

* 獲取成員型別

* 成員物件.gettype() (比較重要) */

class

people

class teacher extends

people

public

class

reflect_field

}

/*

通過遍歷字段,獲取字段對應的方法

方法:是由set/get 和欄位名 拼接而成的

注意:採用setter設定值時,不用設定 字段物件.setaccessible(true);

*/class

<?> clazz=class.forname("com.mldn.reflect.grade");

//例項化物件

object obj =clazz.newinstance();

field fields =clazz.getdeclaredfields();

//遍歷字段陣列

for(field f:fields)

if(f.gettype()==string.class

) method getmethod=clazz.getmethod("get"+initcap(fieldname));

object obj1= getmethod.invoke(obj);//

物件.getscore();

system.out.println(obj);

}

反射的理解

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

反射的簡單理解

載入類 3個方式 person有2個屬性,name和age,最後會給出person類的資訊 class clazz1 class.forname person class clazz2 person.class person p new person class clazz3 p.getclass ...

030 反射的理解

1.如果明確的知道乙個類的名稱,呼叫這個類方法的時候,就new乙個物件直接去呼叫 比如 a類有乙個方法 loadsomething 使用的時候 new a loadsomething 2.如果在開發中想傳入不同的類,讓傳入的類都去呼叫loadsomething 方法 此時,因為不知道後面會傳入什麼類...