基本學(xué)習(xí):
Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數(shù)類型的公共構(gòu)造函數(shù),
Constructor[] getConstructors() -- 獲得類的所有公共構(gòu)造函數(shù)
Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數(shù)類型的構(gòu)造函數(shù)(與接入級(jí)別無關(guān))
Constructor[] getDeclaredConstructors() -- 獲得類的所有構(gòu)造函數(shù)(與接入級(jí)別無關(guān))
獲得字段信息的Class 反射調(diào)用不同于那些用于接入構(gòu)造函數(shù)的調(diào)用,在參數(shù)類型數(shù)組中使用了字段名:
Field getField(String name) -- 獲得命名的公共字段
Field[] getFields() -- 獲得類的所有公共字段
Field getDeclaredField(String name) -- 獲得類聲明的命名的字段
Field[] getDeclaredFields() -- 獲得類聲明的所有字段
用于獲得方法信息函數(shù):
Method getMethod(String name, Class[] params) -- 使用特定的參數(shù)類型,獲得命名的公共方法
Method[] getMethods() -- 獲得類的所有公共方法
Method getDeclaredMethod(String name, Class[] params) -- 使用特寫的參數(shù)類型,獲得類聲明的命名的方法
Method[] getDeclaredMethods() -- 獲得類聲明的所有方法

























































































控制臺(tái)輸出如下:
===========begin getNameTest============
string class name: java.lang.String
button class name: java.awt.Button
super button class name: java.awt.Component
clsTest name: java.awt.Button
===========end getNameTest============
===========begin getMethodTest==========
begin testMethod invoked......
str= hello, my dear!
name= amigo
end testMethod invoked......
returnStr= return str
===========end getMethodTest==========
在這里,我想說的是如果根據(jù)字符串去做我們自己想要的事(包括動(dòng)態(tài)執(zhí)行對(duì)應(yīng)的方法,生成相應(yīng)的類),我們?cè)趥魉蛿?shù)據(jù)的時(shí)候,大部分都是傳字符串的(HTTP,socket)等,我們接受到這些字符串時(shí),再根據(jù)這些字符串內(nèi)容而去做相應(yīng)的事,那是一件非常不錯(cuò)的事,可以遠(yuǎn)程調(diào)用方法(客戶端發(fā)送指定的字符串,讓服務(wù)器根據(jù)反射去執(zhí)行對(duì)應(yīng)的方法)。。。事實(shí)上,我也曾經(jīng)做過這樣項(xiàng)目,客戶端(不是java語言寫的)利用socket去呼叫服務(wù)器(java寫的)方法,同時(shí)還可以直接傳遞參數(shù),這些都是根據(jù)java的反射技術(shù)實(shí)現(xiàn)的。好了,其他的就多說了,我們從最基礎(chǔ)的看起吧,下面是一個(gè)最基本方法反射





























































編譯執(zhí)行,可以看到想要的結(jié)果,想象一下,把那些字符串變成別的地方傳過來的數(shù)據(jù):)
再來一個(gè)方法中有數(shù)組的反射,我研究了一下,有一點(diǎn)點(diǎn)的區(qū)別的。大家要仔細(xì)看哦


















































好了,基本的是這樣了,再?gòu)?fù)雜的程序也是有基礎(chǔ)演變而來的。我在這里就學(xué)會(huì)許多:)
練習(xí)代碼:





















































































輸出:
MyClass Constructor...
S=abc
Field s=123456789
MyClass@d9f9c3
2. instanceof
instanceof 用來判斷類型。除了 instanceof 關(guān)鍵字以外,還可以使用 Class.isInstance() 方法,兩者功能相同。















輸出
false
true
true