/** 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 方法 此時,因為不知道後面會傳入什麼類...