999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談Java語言中的反射機制及應(yīng)用

2018-06-11 01:49:24杜叔強
科學(xué)與財富 2018年12期

杜叔強

摘 要:反射是Java語言中的一種重要的編程機制;總結(jié)了Java語言中反射的原理,以及反射相關(guān)類的獲取方式,并總結(jié)了反射機制的幾點應(yīng)用。

關(guān)鍵詞:反射機制 Class Constructor Field Method

1反射的概念

Java反射是Java被視為動態(tài)(或準(zhǔn)動態(tài))語言的一個關(guān)鍵性質(zhì)。這個機制允許程序在運行時通過反射API取得任何一個已知名稱的類的內(nèi)部信息,包括其訪問修飾符、父類、實現(xiàn)的接口,也包括屬性和方法的所有信息,并可在運行時改變屬性值或進(jìn)行方法調(diào)用。Java反射機制容許程序在運行時加載、探知、使用編譯期間完全未知的類。也就是說,Java可以加載一個運行時才得知名稱的類,并且獲得其完整結(jié)構(gòu)信息,這種動態(tài)獲取信息以及動態(tài)調(diào)用對象的成員的功能稱為java語言的反射機制[1]。

2反射的原理

Java反射機制的實現(xiàn)要借助于4個類:Class,Constructor,F(xiàn)ield,Method;其中Class代表的是類對象,Constructor是類的構(gòu)造器對象,F(xiàn)ield是類的屬性對象,Method是類的方法對象,通過這四個對象我們可以粗略的看到一個類的各個組成部分。其中最核心的就是Class類,它是實現(xiàn)反射的基礎(chǔ)。Class類的實例就是某個類的描述信息。Class類的實例表示正在運行的Java應(yīng)用程序中的類和接口。

Class沒有公共構(gòu)造方法。Class對象是在加載類時由Java虛擬機以及通過調(diào)用類加載器中的defineClass方法自動構(gòu)造的。JVM在程序第一次主動使用某個類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序所有的類都加載到內(nèi)存中,而是到用的時候才把它加載進(jìn)來,而且只加載一次。當(dāng)JVM加載某個類時,會到本地磁盤去找到這個類的字節(jié)碼文件,然后將這個字節(jié)碼文件加載到JVM內(nèi)存中,并且在內(nèi)存堆區(qū)創(chuàng)建這個類的Class對象。注意這個不是new出來的對象,而是類的類型描述對象,每個類只有一個Class對象,作為類的數(shù)據(jù)結(jié)構(gòu)的接口。JVM創(chuàng)建對象前,會先檢查類是否加載,尋找類對應(yīng)的Class對象,若類已加載好,則為待創(chuàng)建對象分配內(nèi)存。有了類型信息描述對象Class對象,就可以獲取類的屬性,方法等信息。

3 Class對象的獲取

有三種方式可以獲取Class對象[2]。

(1)通過類.class屬性獲得。任何數(shù)據(jù)類型都有一個“靜態(tài)”的class屬性。Java在編譯一個類文件時,會為該類動態(tài)地添加一個公有的靜態(tài)常量屬性class,這個屬性記錄了該類的相關(guān)信息,即類型描述信息,它是Class類的實例。

(2)通過對象.getClass()方法獲得。任何對象都可以調(diào)用getClass()返回表示此對象運行時類的Class對象。當(dāng)?shù)玫揭粋€對象引用而不知道所屬的類時,就可以用此方法得到該對象所屬類的Class對象。

(3)通過Class.formName()靜態(tài)方法獲得。Java的Class提供了靜態(tài)方法formName(),此方法顯示地加載指定類,并返回被加載類的Class對象。

4 Constructor對象的獲取

Constructor類的對象用于描述類的單個構(gòu)造方法。Class對象提供了四個方法可以獲取Constructor對象。

(1)getConstructor(Class parameterTypes…)獲取指定參數(shù)類型的公有Constructor對象。

(2)getConstructors()獲取指定類的公有構(gòu)造方法描述對象Constructor列表。

(3)getDeclaredConstructor(Class parameterTypes…)獲取指定參數(shù)類型的構(gòu)造方法描述對象。

(4)getDeclaredConstructors()獲取指定類的所有構(gòu)造方法描述對象列表。

5 Method對象的獲取

Method類的對象用于描述類的單個方法(不包括構(gòu)造方法)。可以通過Method類來獲取方法的訪問權(quán)限、參數(shù)類型、返回值類型等信息,并且可以通過獲取的Method對象來動態(tài)執(zhí)行方法。Class對象提供了四個方法可以獲取Method對象。

(1)getMethod(String name,Class parameterTypes…)獲取指定名稱和參數(shù)類型的公有方法描述對象。

(2)getMethods()獲取公有的方法描述對象列表。

(3)getDeclaredMethod(String name, Class parameterTypes…)獲取指定名稱和參數(shù)類型的方法描述對象。

(4)getDeclaredMethods()獲取類本身定義的所有方法描述對象。

6 Field對象的獲取

Field類的對象用于描述類的單個屬性。可以通過Field對象來獲取屬性的訪問權(quán)限、屬性類型等信息,并且可以通過獲取的Field對象來動態(tài)地修改屬性值。Class對象也提供了四個方法可以獲取Field對象。

(1)getField(String name)獲取指定名稱的公有Field對象。

(2)getFields()獲取指定類的公有屬性描述對象Field列表。

(3)getDeclaredField(String name)獲取指定名稱的Field對象。

(4)getDeclaredFields()獲取指定類的所有屬性描述對象Field列表。

7反射的應(yīng)用

(1)運行時類型識別

Class對象的isInstance()方法其原型是public boolean isInstance(Object obj),這個方法用來判定指定的對象是不是類的實例。例如從一個容器中取得了對象后,就可以判定這個對象的所屬的類。

(2)獲取資源文件的URL

Class對象的getResource()方法其原型是public URL getResource(String name),此方法可以返回與給定類相關(guān)的指定名稱的資源URL。如果程序中用到圖片、音頻等資源,可以將這些資源放到相關(guān)類字節(jié)碼文件相同目錄,便于程序打包成jar文件。

(3)動態(tài)獲取類型信息

在程序中可以通過反射顯式加載指定類,通過反射實例化類,還可以通過反射執(zhí)行方法,修改屬性值和訪問權(quán)限等操作。

8小結(jié)

Java中反射機制很實用,靈活使用反射能讓我們代碼更加靈活。但是反射也有缺點,反射包括了一些動態(tài)類型,所以 JVM 無法對這些代碼進(jìn)行優(yōu)化。因此,反射操作的效率要比那些非反射操作低得多。我們應(yīng)該避免在經(jīng)常被執(zhí)行的代碼或?qū)π阅芤蠛芨叩某绦蛑惺褂梅瓷鋄3]。

參考文獻(xiàn):

[1]Java基礎(chǔ)之—反射[EB/OL].[2018-03-17].http://blog.csdn.net/sinat_38259539/article/details/71799078

[2]徐傳運 張楊.Java高級程序設(shè)計[M].北京:清華大學(xué)出版社,2014.

[3]粗淺看 java反射機制[EB/OL].[2018-03-17.http://blog.csdn.net/wsl211511/article/details/51605655

主站蜘蛛池模板: 国产在线精品网址你懂的| 免费一级毛片不卡在线播放| 无码免费的亚洲视频| 国产免费怡红院视频| 欧美中文字幕在线二区| 国产情精品嫩草影院88av| 国产美女在线观看| 亚洲视频欧美不卡| 国产精品极品美女自在线网站| 72种姿势欧美久久久大黄蕉| 中文无码精品A∨在线观看不卡| 久久成人18免费| 999国产精品| 中文字幕免费视频| 亚洲精品少妇熟女| 国产成熟女人性满足视频| 国产精品福利导航| 亚洲无线国产观看| 草逼视频国产| 色综合狠狠操| 99re66精品视频在线观看 | 国产精品视频观看裸模| 亚洲综合久久成人AV| 久久精品视频亚洲| 国产丰满成熟女性性满足视频| 国产91在线免费视频| 亚洲日本一本dvd高清| 国产一区三区二区中文在线| 亚洲AV色香蕉一区二区| 午夜福利网址| 日韩欧美成人高清在线观看| 婷婷开心中文字幕| 免费国产无遮挡又黄又爽| 国产欧美中文字幕| 欧美日韩在线亚洲国产人| 日韩欧美视频第一区在线观看 | 最新午夜男女福利片视频| 91精品国产自产91精品资源| 伊人色在线视频| 亚洲欧洲美色一区二区三区| 丝袜国产一区| 在线高清亚洲精品二区| 欧美三级自拍| 午夜视频日本| 中文字幕 91| 毛片免费高清免费| 色色中文字幕| 四虎永久在线| 国产成在线观看免费视频| 蜜桃臀无码内射一区二区三区 | 欧美亚洲日韩中文| 中文国产成人精品久久一| 精品视频一区二区三区在线播| 久久精品国产999大香线焦| 国产成人精品18| 伊人天堂网| 国产亚洲精品无码专| 青青草91视频| 精品国产自在在线在线观看| 一级在线毛片| 国产精品深爱在线| 夜夜拍夜夜爽| 国产精品毛片一区视频播| 成人免费网站久久久| 国产自在线播放| 亚洲中文字幕在线观看| 强乱中文字幕在线播放不卡| 久久夜夜视频| 国产精品无码作爱| 日韩成人午夜| 亚洲AⅤ综合在线欧美一区| 午夜视频日本| 久久精品人人做人人爽电影蜜月| 久久黄色免费电影| 国产va在线观看免费| 欧美性久久久久| 秘书高跟黑色丝袜国产91在线| 国产成人调教在线视频| 国产精品极品美女自在线网站| 蜜桃视频一区二区| 欧美色综合网站| 伊人AV天堂|