反射的基本用法

2021-09-26 15:13:34 字數 3104 閱讀 8247

最近看spring原始碼,突然發現有好多地方都用到了反射,特此來回顧一下:

先來建立userinfo基礎類

public

class

userinfo

private

userinfo

(string name, integer age, string shool)

public

userinfo

(string name, integer age)

public integer getage()

public

void

setage

(integer age)

private string getusername()

public

void

setusername

(string username)

@override

public string tostring()

';}}

public

class

demo

//獲取方法

system.out.

println

("獲取所有方法——————————");

method[

] methods = mclass.

getdeclaredmethods()

;//獲取所有私有、公有的方法

for(method method:

methods)

else

system.out.

print

(******methodname+

" arg"

+i);

} system.out.

println

(");");

}//獲取構造器

system.out.

println

("輸出所有構造器————————————————————");

constructor[

] constructors= mclass.

getdeclaredconstructors()

;//獲取所有構造器(私有、公有)

for(constructor constructor:

constructors)

system.out.

println

(");");

}//如何執行指定的方法

system.out.

println

("------------反射執行方法--------------------");

string name =

"getmyinfo"

;//需要呼叫的方法名

class[

] parametertypes =

newclass[3

];//呼叫方法需要的引數

parametertypes[0]

= string.

class

; parametertypes[1]

= integer.

class

; parametertypes[2]

= string.

class

;// method me = mclass.getdeclaredmethod(name, parametertypes);

// object obj = mclass.newinstance();//建立例項

object[

] arg =

newobject[3

];arg[0]

="李四"

; arg[1]

=new

integer(18

);arg[2]

="王五"

;// me.invoke(obj, arg);//呼叫

string constuctorname = mclass.

get******name()

;//獲取到此引數匹配的構造器

constructor declaredconstructor = mclass.

getdeclaredconstructor

(parametertypes)

;//此時方法是私有的話可以使用以下方法:setaccessible

declaredconstructor.

setaccessible

(true);

//新建乙個例項

object object=declaredconstructor.

newinstance

(arg)

; system.out.

println

(object.

tostring()

);//給set方法設定值

method method=mclass.

getdeclaredmethod

("setusername"

,string.

class);

// object obj= mclass.newinstance();

// system.out.println(mclass.newinstance());

method.

setaccessible

(true);

method.

invoke

(object,

"張三");

//method method1=mclass.getdeclaredmethod("getusername");

// method1.setaccessible(true);

// system.out.println(method1.invoke(object));

//此時get出來的值已改變

system.out.

println

(object);}

}

C 反射的基本用法

反射指程式可以訪問 檢測和修改它本身狀態或行為的一種能力。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。軟體執行 public c...

java反射機制的基本用法

1 獲取乙個class物件 class c this.getclass reflectimplement r new reflectimplement 通過類例項獲得 class c1 r.getclass class subclass c1.getsuperclass 通過類例項獲得父類物件 cl...

Python 反射的用法

在做程式開發中,我們常常會遇到這樣的需求 需要執行物件裡的某個方法,或需要呼叫物件中的某個變數,但是由於種種原因我們無法確定這個方法或變數是否存在,這是我們需要用乙個特殊的方法或機制要訪問和操作這個未知的方法或變數,這中機制就稱之為反射。接下記錄下反射幾個重要方法 判斷物件中是否有這個方法或變數 c...