Java:反射

編程語言分類(以程序運行時結(jié)構(gòu)及變量類型的可變性作為標準):

--|1.靜態(tài)語言

--|2.動態(tài)語言:程序運行時扭弧,允許改變程序的結(jié)構(gòu)及變量類型的語言;

~由此记舆,Java寄狼、C++、C#是非動態(tài)語言,而Perl泊愧、Python伊磺、Ruby是動態(tài)語言

·Java中按照加載時機將類的加載類型劃分為編譯時檢查類型、運行時加載類型

1.編譯時檢查類型的類(運行時已識別類型:RTTI--Run Time Type Identificated):編譯時識別删咱,該類型的類在編譯時由編譯器檢查確認屑埋,在運行時加載

2.運行時加載類型(反射:主要用于構(gòu)造工具):從其他地方得到一個未知類的對象,在程序運行時動態(tài)的將該未知類對象所在類文件加載到Java Virtual Machine中

---- 反射(Reflective): 能夠分析類能力的程序

···反射庫(Reflection Library)-豐富且精心設(shè)計的工具集痰滋,方便編寫能夠動態(tài)操縱Java代碼的程序摘能。這項功能被大量應(yīng)用與JavaBeans中,JavaBeans為Java組件的的體系結(jié)構(gòu)敲街,在設(shè)計或運行中添加新類時团搞,可以快速應(yīng)用開發(fā)工具動態(tài)查詢新添加類的能力(具體體現(xiàn)為獲得新類的實例域及方法);

·反射機制的作用:

? ? 1.程序運行時動態(tài)分析類的能力

? ? 2.程序運行時動態(tài)查看對象多艇,例如:編寫一個toString方法供所有類使用

? ? 3.實現(xiàn)通用的數(shù)組操作代碼

? ? 4.利用Method對象(對象類似于C++中的函數(shù)指針)

反射中的類Class逻恐、Constructor、Method


·Class類(泛型類--例如:Employee.class的類型是Class<Employee>):保存對象在程序運行時的類型信息(程序運行期間峻黍,Java運行系統(tǒng)始終為所有的對象維護一個被稱為運行時的類型標識复隆。該信息跟蹤著每個對象所屬的類。虛擬機利用運行時類型信息選擇相應(yīng)的方法執(zhí)行)姆涩,一個Class對象表示一個特定類的屬性

Class類中的方法:

1.public String getName(){} -- 返回類的名字



2.public static Class forName(String className){} -- 返回對應(yīng)className的類的Class對象(className:類或接口的全名挽拂,即包名.類名),需處理異常:ClassNotFoundException

3.T表示任意Java類型:則T.class將代表T對應(yīng)的Class類對象

4.任意對象都有的方法:public Class getClass(){} -- 返回調(diào)用該方法的對象的所屬類的Class類對象

注:2骨饿、3亏栈、4為獲取Class類對象的方法(以下僅針對獲取Class類對象這一過程)

>其中編號為2的方法僅需要類的名字,而不需要導(dǎo)入包宏赘,更加具有普遍意義(反射 -- 運行時檢查绒北,處理的運行時異常為ClassNotFoundException);

>編號為3的方法需要類的名字置鼻,且需要導(dǎo)入相應(yīng)的包(編譯時檢查)镇饮;

>編號4的方法需要類對象且需要導(dǎo)入相應(yīng)的包(編譯時檢查);



5.public Method getMethod(String methodName, Class...parametersType){} -- 返回特定方法的Method對象?

>第一個參數(shù)為方法名字箕母,之后的參數(shù)為要獲取方法的參數(shù)所在類的Class對象(以下同此格式可以此方式解釋)

6.public Method[ ] getMethods(){} -- 返回Class對象指向的類中以public作為訪問權(quán)限修飾符的方法

>以下同此格式可以此方式解釋(實在拗口储藐,書寫不便,見諒嘶是!)

7.public Method[ ] getDeclaredMethods(){} -- 返回Class對象指向的類中的所有方法(包括protected钙勃、private修飾的方法)的Method對象的數(shù)組;

>以下同此格式可以此方式解釋(實在拗口聂喇,書寫不便辖源,見諒蔚携!)

注:5、6克饶、7為Class類中獲取Class對象指向的類中的方法的方法



8.public Constructor getConstructor(Class...parameterTypes){} -- 返回Class對象中特定構(gòu)造器的Constructor對象

9.public Constructor[ ] getConstructors(){} -- 返回包含Class對象中公共構(gòu)造器對象的Constructor數(shù)組

10.public Constructor[ ] getDeclaredConstructors(){} -- 返回包含Class對象中所有構(gòu)造器對象的Constructor數(shù)組

注:8酝蜒、9、10為Class類中獲取Class對象中的構(gòu)造器的方法

11.public Field getField(String name){} -- 返回Class對象中的特定實例域的Field對象

12.public Field[ ] getFields(){} -- 返回包含Class對象中公共實例域?qū)ο蟮腇ield數(shù)組

13.public Field[ ] getDeclaredFields(){} -- 返回包含Class對象中所有實例域?qū)ο蟮腇ield數(shù)組

注:11矾湃、12亡脑、13為Class類中獲取Class對象中的實例域的方法(因封裝原理,一般getDeclaredFields(){}是無意義的)

14.public void setAccessible(boolean flag){} -- 設(shè)置訪問Class對象所指向的類的私有屬性權(quán)限


Method類:描述方法的類

Method類對象指向具體的方法邀跃,類似于C霉咨、C++中的函數(shù)指針;

Method類中的方法:

public void invoke(String methodName, Object...parameters){} -- 調(diào)用Method類對象所指的方法(在運行時動態(tài)調(diào)用需要的方法)


Constructor類:描述構(gòu)造器的類

Constructor類對象指向具體的構(gòu)造器拍屑,本質(zhì)是函數(shù)途戒,也類似于C、C++中的函數(shù)指針僵驰;

Constructor類中的方法:

public Object newInstance(Object...parameters){} -- 調(diào)用Constructor類對象所指的構(gòu)造器


Field類:描述實例域的類

關(guān)于實例域(Field):

-- 封裝:從形式上看封裝不過是將數(shù)據(jù)和行為組合在一個包內(nèi)喷斋,并對對象的使用者隱藏了行為的實現(xiàn)方式。對象中的數(shù)據(jù)稱為實例域(instance field)矢渊,這些值的集合就是這個對象的當前狀態(tài)(state)继准。向?qū)ο蟀l(fā)送一條消息枉证,它的狀態(tài)就有可能發(fā)生改變矮男。

對象的主要特性:

? ? 1.對象的行為(behavior) -- 可以對對象施加哪些操作,或可以對對象施加哪些方法

? ? 2.對象的狀態(tài)(state) -- 當施加方法時室谚,對象如何響應(yīng)

? ? 3.對象表示(identity) -- 如何辨別具有相同行為與狀態(tài)的不同對象

大致上的含義是改變數(shù)據(jù)的方式毡鉴、改變后的數(shù)據(jù)代表的意義、標示相同數(shù)據(jù)的不同含義

>由此秒赤,對象即一組數(shù)據(jù)猪瞬,而數(shù)據(jù)能夠通過邏輯運算實現(xiàn)人為賦予的抽象意義!入篮!


陈瘦!·待補充 -- 動態(tài)代理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潮售,隨后出現(xiàn)的幾起案子痊项,更是在濱河造成了極大的恐慌,老刑警劉巖酥诽,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞍泉,死亡現(xiàn)場離奇詭異,居然都是意外死亡肮帐,警方通過查閱死者的電腦和手機咖驮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人托修,你說我怎么就攤上這事忘巧。” “怎么了睦刃?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵袋坑,是天一觀的道長。 經(jīng)常有香客問我眯勾,道長枣宫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任吃环,我火速辦了婚禮也颤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郁轻。我一直安慰自己翅娶,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布好唯。 她就那樣靜靜地躺著竭沫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骑篙。 梳的紋絲不亂的頭發(fā)上蜕提,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音靶端,去河邊找鬼谎势。 笑死,一個胖子當著我的面吹牛杨名,可吹牛的內(nèi)容都是我干的脏榆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼台谍,長吁一口氣:“原來是場噩夢啊……” “哼须喂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起趁蕊,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坞生,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后介衔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恨胚,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年炎咖,在試婚紗的時候發(fā)現(xiàn)自己被綠了赃泡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寒波。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖升熊,靈堂內(nèi)的尸體忽然破棺而出俄烁,到底是詐尸還是另有隱情,我是刑警寧澤级野,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布页屠,位于F島的核電站,受9級特大地震影響蓖柔,放射性物質(zhì)發(fā)生泄漏辰企。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一况鸣、第九天 我趴在偏房一處隱蔽的房頂上張望牢贸。 院中可真熱鬧,春花似錦镐捧、人聲如沸潜索。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹习。三九已至,卻和暖如春列牺,著一層夾襖步出監(jiān)牢的瞬間整陌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工昔园, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔓榄,地道東北人并炮。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓默刚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逃魄。 傳聞我的和親對象是個殘疾皇子荤西,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容